Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Низкая производительность SQL Server 2000  [new]
Федя Смирнов
Member

Откуда:
Сообщений: 16
Здравствуйте!
Не разбираюсь в SQL Server в достаточной степени.
Хотел узнать, каким способом можно исправить ошибку "Ошибка транзакции".
С недавних пор программа делопроизводства, работающая на основе SQL Server 2000, при сохранении документа стала надолго "задумываться", после чего выдавать эту ошибку. Дальше программа "падает", документ не сохраняется. Это может происходить несколько раз в день у любого из сотни пользователей.
Зашёл в Profiler, все запросы исполняются довольно быстро.
Наведите на мысль, может быть, поменять значение какой-нибудь константы типа тайм-аута. Сервер перезагружал.
31 окт 11, 12:37    [11525658]     Ответить | Цитировать Сообщить модератору
 Re: Низкая производительность SQL Server 2000  [new]
Glory
Member

Откуда:
Сообщений: 104751
Федя Смирнов
Хотел узнать, каким способом можно исправить ошибку "Ошибка транзакции".

Это текст ошибки вашего приложения, а не сервера


Федя Смирнов
Зашёл в Profiler, все запросы исполняются довольно быстро.

Т.е. ошибки сервера вы не мониторили ?
31 окт 11, 12:39    [11525682]     Ответить | Цитировать Сообщить модератору
 Re: Низкая производительность SQL Server 2000  [new]
Федя Смирнов
Member

Откуда:
Сообщений: 16
Glory, нет, ещё не мониторил.
31 окт 11, 13:14    [11525961]     Ответить | Цитировать Сообщить модератору
 Re: Низкая производительность SQL Server 2000  [new]
Федя Смирнов
Member

Откуда:
Сообщений: 16
Некоторое время пытался трассировать Errors and Warnings, получаю постоянно такие сообщения:
Exception: Error 3903; Severity: 16; State:1
Sort Warnings
Exception: Error 911; Severity: 16; State:1.
Может быть, следует обратиться в фирму, где закуплено ПО, а не СУБД.
31 окт 11, 14:20    [11526573]     Ответить | Цитировать Сообщить модератору
 Re: Низкая производительность SQL Server 2000  [new]
baracs
Member

Откуда: Москва
Сообщений: 7217
Федя Смирнов
Некоторое время пытался трассировать Errors and Warnings, получаю постоянно такие сообщения:
Exception: Error 3903; Severity: 16; State:1
Sort Warnings
Exception: Error 911; Severity: 16; State:1.
Может быть, следует обратиться в фирму, где закуплено ПО, а не СУБД.

Error 3903 - это и есть ваша "Ошибка транзакции": The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION.

Error 911:
BOL 2000
Message Text
Could not locate entry in sysdatabases for database '%.*ls'. No entry found with that name. Make sure that the name is entered correctly.

Explanation
This error occurs when attempting to change database context (with a USE statement) to a database that does not exist, or when the default database established for a login does not exist. In the latter case, the user login then attempts to access the master database.

Action
To obtain a list of databases, execute sp_helpdb or issuing this query:

SELECT name
FROM master..sysdatabases

The list returned will contain the databases that exist on the Microsoft® SQL Server™ installation. Either create a missing database or connect to an existing one. To correct login-level errors, it may be necessary to execute sp_defaultdb.
31 окт 11, 17:52    [11528606]     Ответить | Цитировать Сообщить модератору
 Re: Низкая производительность SQL Server 2000  [new]
Федя Смирнов
Member

Откуда:
Сообщений: 16
baracs, спасибо за развёрнутый ответ! Сейчас разбираюсь с данным вопросом на профильном форуме.
1 ноя 11, 08:31    [11530367]     Ответить | Цитировать Сообщить модератору
 Re: Низкая производительность SQL Server 2000  [new]
Федя Смирнов
Member

Откуда:
Сообщений: 16
В ходе анализа Process Info (в Enterprise Manager) выяснилось, что выполняется скрипт, который имеет режим Sch-S. В теле этой пользовательской функции происходит заполнение строки посредством создания курсора и вычисления данных. Насколько я понял, скрипт приводит к блокировке таблицы. Осталось это доказать. Правильно ли я думаю?
1 ноя 11, 11:23    [11531229]     Ответить | Цитировать Сообщить модератору
 Re: Низкая производительность SQL Server 2000  [new]
Glory
Member

Откуда:
Сообщений: 104751
Федя Смирнов
Насколько я понял, скрипт приводит к блокировке таблицы. Осталось это доказать. Правильно ли я думаю?

В MSSQL вообще любой запрос приводит к каким то блокировкам
Но ни каждая блокировка блокирует объекты монопольно и от всех других коннектов
1 ноя 11, 11:50    [11531469]     Ответить | Цитировать Сообщить модератору
 Re: Низкая производительность SQL Server 2000  [new]
Федя Смирнов
Member

Откуда:
Сообщений: 16
Glory, это правильно. Но может ли курсор блокировать на уровне Sch-S, вернее, что это может означать?
1 ноя 11, 12:05    [11531582]     Ответить | Цитировать Сообщить модератору
 Re: Низкая производительность SQL Server 2000  [new]
Glory
Member

Откуда:
Сообщений: 104751
Федя Смирнов
Но может ли курсор блокировать на уровне Sch-S, вернее, что это может означать?

Sch-S = Schema stability. Ensures that a schema element, such as a table or index, is not dropped while any session holds a schema stability lock on the schema element.
Такую блокировку накладывает почти каждый запрос
Потому что никто не хочет получить изменение структуры таблицы пока ты сам выполняешь свой запрос

Вы не там ищите. У вас ошибка с командой ROLLBACK TRANSACTION. Причем тут блокировки ?
1 ноя 11, 12:09    [11531619]     Ответить | Цитировать Сообщить модератору
 Re: Низкая производительность SQL Server 2000  [new]
Федя Смирнов
Member

Откуда:
Сообщений: 16
Glory, возможно. Буду искать дальше, что откуда вызывается, где не отрабатывает.
Вот ответы, которые мне дали в профильном форуме:
"Ошибки, про которые Вы пишете, относятся, судя по всему, к другой ситуации - к выдаче команды COMMIT TRANSACTION вне транзакции. Такая ситуация допустима и не ведет к возникновению ошибок функционирования системы".
"Если проблем с энергосбережением нет - можно посмотреть на "Current Activity" во время возникновения проблемы.
Блокирующие сесии: Process Info / cтолбец "Blocking" и "Blocked by".
Ожидания: столбцы "Wait Time" и "Wait Type".
Я посмотрел и увидел, что там иногда происходит блокировка, откуда и сделал вывод, что у тех пользователей медленно отрабатывают скрипты.
1 ноя 11, 13:49    [11532734]     Ответить | Цитировать Сообщить модератору
 Re: Низкая производительность SQL Server 2000  [new]
ScareCrow
Member

Откуда: Белый город
Сообщений: 17423
автор
Ошибки, про которые Вы пишете, относятся, судя по всему, к другой ситуации - к выдаче команды COMMIT TRANSACTION вне транзакции

автор
Error 3903. The rollback transaction request has no corresponding begin transaction
1 ноя 11, 14:13    [11532967]     Ответить | Цитировать Сообщить модератору
 Re: Низкая производительность SQL Server 2000  [new]
ScareCrow
Member

Откуда: Белый город
Сообщений: 17423
они там коммит от роллбэка не отличают?
1 ноя 11, 14:13    [11532969]     Ответить | Цитировать Сообщить модератору
 Re: Низкая производительность SQL Server 2000  [new]
Федя Смирнов
Member

Откуда:
Сообщений: 16
Хотел спросить ещё вот что.
Как узнать, откуда (как) запускается функция. Она была написана недавно не нами, но подозрительно часто участвует в блокировках. Я уже писал, что внутри функции происходит заполнение курсора и вытягивание оттуда строки. Сама функция в EM значится как User Defined Functions, а не Strored Procedures.
Пробовал смотреть содержимое запросов, триггеров через
select a.name, b.text
from sysobjects a inner join syscomments b on a.id = b.id
where b.text LIKE '%название функции%'
order by a.id, b.colid
но они друг друга сами, похоже не вызывают. Но я же вижу, что при блокировках довольно часто эта функция висит в режиме Sch-S.
Подскажите, пожалуйста, где найти вызов функции? В саму программу делопроизводства мы влезть не можем, только в БД, функцию написал другой отдел скрытно от нас, так что вряд ли бы он мог влезть в исходный код программы делопроизводства.
3 ноя 11, 15:28    [11546928]     Ответить | Цитировать Сообщить модератору
 Re: Низкая производительность SQL Server 2000  [new]
Glory
Member

Откуда:
Сообщений: 104751
Федя Смирнов
Пробовал смотреть содержимое запросов,

Нет таких объектов - "запросы"
Есть процедуры, функции, представления
И в syscomments все тексты этих объектов побиты на части по 8000 байт
Поэтому искать нужно с учетов того, что имя попало на "разрыв"

Федя Смирнов
Но я же вижу, что при блокировках довольно часто эта функция висит в режиме Sch-S.

Разумеется, функия не должна меняться, пока выполняется.
Что вы так суетитесь вокруг этой блокировки ?
3 ноя 11, 15:44    [11547054]     Ответить | Цитировать Сообщить модератору
 Re: Низкая производительность SQL Server 2000  [new]
Федя Смирнов
Member

Откуда:
Сообщений: 16
Glory, спасибо за ответ.
Дело в том, что важно найти причину подвисаний. Я до сих пор не понимаю, связано ли это с транзакциями, и почему раньше они работали прекрасно, а теперь откатываются. Пользователи не могут так работать, документы теряются. Возможно, причина в сети.
3 ноя 11, 15:53    [11547127]     Ответить | Цитировать Сообщить модератору
 Re: Низкая производительность SQL Server 2000  [new]
Федя Смирнов
Member

Откуда:
Сообщений: 16
Проблема-то как раз в том, что эта функция подозрительно часто возникает в момент сохранения документов. Хотя явно ни откуда не вызывается. Другие пользовательские функции так себя не ведут. Впрочем, скорость заполнения курсора настолько велика, что подвисаний по его вине быть не должно.
3 ноя 11, 15:55    [11547139]     Ответить | Цитировать Сообщить модератору
 Re: Низкая производительность SQL Server 2000  [new]
Glory
Member

Откуда:
Сообщений: 104751
Федя Смирнов
и почему раньше они работали прекрасно, а теперь откатываются.

Какие регламентные работы вы проводите для своей базы ?
3 ноя 11, 15:56    [11547143]     Ответить | Цитировать Сообщить модератору
 Re: Низкая производительность SQL Server 2000  [new]
Федя Смирнов
Member

Откуда:
Сообщений: 16
Glory, да, на самом деле, никаких. Резервное копирование, администрирование.
Скорее всего, соседний отдел что-то нахимичил, доступ у них есть. Пока не признаются.
3 ноя 11, 16:05    [11547198]     Ответить | Цитировать Сообщить модератору
 Re: Низкая производительность SQL Server 2000  [new]
baracs
Member

Откуда: Москва
Сообщений: 7217
Федя Смирнов
Проблема-то как раз в том, что эта функция подозрительно часто возникает в момент сохранения документов. Хотя явно ни откуда не вызывается. Другие пользовательские функции так себя не ведут. Впрочем, скорость заполнения курсора настолько велика, что подвисаний по его вине быть не должно.
Вы же, вроде, пользовались SQL Profiler-ом?

Так, чего гадаете? Соберите статистику по выполнению ХП (категория событий Stored Procedures) и запросов (категория событий TSQL) и смотрите какие запросы и(или) процедуры тормозят, или завершаются с ошибкой.
3 ноя 11, 16:47    [11547538]     Ответить | Цитировать Сообщить модератору
 Re: Низкая производительность SQL Server 2000  [new]
Федя Смирнов
Member

Откуда:
Сообщений: 16
baracs, согласен с Вами. Решил зайти в Профайлер, вижу, что транзакции действительно отменяются после 3903 ошибки. Причём, ошибка возникает всегда после вызова одной и той же хранимой процедуры, которая входит в само ПО (её никто не трогал, она сама стала глючить). Ошибка странным образом возникает в редких случаях (не постоянно). Думаю, следует попробовать сжать базу, сохранять вложенные к документам файлы не в общую базу или рассмотреть подробнее сами процедуры.
Через неделю-другую напишу, что получилось.
9 ноя 11, 12:36    [11568590]     Ответить | Цитировать Сообщить модератору
 Re: Низкая производительность SQL Server 2000  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
Федя Смирнов
baracs, согласен с Вами. Решил зайти в Профайлер, вижу, что транзакции действительно отменяются после 3903 ошибки. Причём, ошибка возникает всегда после вызова одной и той же хранимой процедуры, которая входит в само ПО (её никто не трогал, она сама стала глючить). Ошибка странным образом возникает в редких случаях (не постоянно). Думаю, следует попробовать сжать базу, сохранять вложенные к документам файлы не в общую базу или рассмотреть подробнее сами процедуры.
Через неделю-другую напишу, что получилось.


а базуто зачем сжимать?
9 ноя 11, 12:51    [11568740]     Ответить | Цитировать Сообщить модератору
 Re: Низкая производительность SQL Server 2000  [new]
baracs
Member

Откуда: Москва
Сообщений: 7217
Федя Смирнов
Причём, ошибка возникает всегда после вызова одной и той же хранимой процедуры, которая входит в само ПО (её никто не трогал, она сама стала глючить). Ошибка странным образом возникает в редких случаях (не постоянно).
В эту процедуру передаются какие-то параметры? Может, есть зависимость между возникновением ошибки и какими-то значениями параметров?
Федя Смирнов
Думаю, следует попробовать сжать базу, сохранять вложенные к документам файлы не в общую базу
В смысле? Особенно настораживает "сжатие" базы...
Федя Смирнов
или рассмотреть подробнее сами процедуры.
Это, как-то ближе к теме.
9 ноя 11, 12:54    [11568775]     Ответить | Цитировать Сообщить модератору
 Re: Низкая производительность SQL Server 2000  [new]
Федя Смирнов
Member

Откуда:
Сообщений: 16
Виноват, думал, возможно, что какие-то записи повреждены. Не буду ничего сжимать.
Спасибо вам за участие, не ожидал такой активной поддержки.
Цитирую текст ХП.
declare @P1 smallint
set @P1=0
exec tran_count @P1 output
select @P1
EventClass TextData
RPC Output Parameter0
SP: CacheHit
ExceptionError: 3903 Severity: 16 State: 1
SQL: BatchCompleted ROLLBACK TRAN

Внутри ХП tranc_count написано следующее:
create procedure TRAN_COUNT (@tran_level integer OUTPUT) as
set nocount on
 set @tran_level = @@trancount
GO
Вроде бы, ничего страшного.

Думаю, знакомые на месте попробуют выяснить причину.

К сообщению приложен файл. Размер - 18Kb
9 ноя 11, 13:47    [11569343]     Ответить | Цитировать Сообщить модератору
 Re: Низкая производительность SQL Server 2000  [new]
Glory
Member

Откуда:
Сообщений: 104751
Федя Смирнов
Вроде бы, ничего страшного.

Думаю, знакомые на месте попробуют выяснить причину.

Конечно ничего страшного
Потому что ошибку вызывает не процедура TRAN_COUNT
Ибо процедура к моменту ошибку уже завершилась - SP:Complete/RPC:Complete
9 ноя 11, 13:52    [11569384]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить