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

Откуда:
Сообщений: 75
Всем привет.
Помогите разобраться, элементарный запрос выполняется медленно 3-5 секунд, но не всегда, не знаю в чём проблема.
UPDATE objs SET locked_id = @lo WHERE id_object = @id

MS SQL 2008 R2.
Заранее спасибо.
17 фев 14, 08:23    [15575250]     Ответить | Цитировать Сообщить модератору
 Re: Скорость выполнения команды UPDATE  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Ну, план посмотрите, блокировки.
17 фев 14, 08:50    [15575291]     Ответить | Цитировать Сообщить модератору
 Re: Скорость выполнения команды UPDATE  [new]
Евгений_lea
Member

Откуда:
Сообщений: 75
Примеру команда SELECT работает всегда мгновенно.
17 фев 14, 08:54    [15575302]     Ответить | Цитировать Сообщить модератору
 Re: Скорость выполнения команды UPDATE  [new]
Евгений_lea
Member

Откуда:
Сообщений: 75
clustered index update 100%
17 фев 14, 08:59    [15575314]     Ответить | Цитировать Сообщить модератору
 Re: Скорость выполнения команды UPDATE  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
Евгений_lea
элементарный запрос выполняется медленно 3-5 секунд, но не всегда, не знаю в чём проблема.
Скорее всего блокировки.
Смотрите, есть ли длинные транзакции, профайлером смотрите, что в этот момент происходит на сервере.
17 фев 14, 09:03    [15575324]     Ответить | Цитировать Сообщить модератору
 Re: Скорость выполнения команды UPDATE  [new]
Евгений_lea
Member

Откуда:
Сообщений: 75
транзакции не используются вообще. Может сеть перегружена.
17 фев 14, 09:04    [15575331]     Ответить | Цитировать Сообщить модератору
 Re: Скорость выполнения команды UPDATE  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Евгений_lea
транзакции не используются вообще. Может сеть перегружена.
Ну, кроме явных есть и неявные транзакции.
Если вы перед тем же апдейтом не написали Begin Tran, сервер все равно завернет эту операцию в неявную транзакцию.
17 фев 14, 09:54    [15575468]     Ответить | Цитировать Сообщить модератору
 Re: Скорость выполнения команды UPDATE  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
Евгений_lea
транзакции не используются вообще. Может сеть перегружена.
Любой запрос изменения данных выполняется в транзакции (да и обычный селект тоже).

Сеть тут не при чём, выполнение UPDATE не зависит от сети (только запрос нужно послать, но это мелочь).
17 фев 14, 09:55    [15575476]     Ответить | Цитировать Сообщить модератору
 Re: Скорость выполнения команды UPDATE  [new]
aleks2
Guest
Евгений_lea
clustered index update 100%

Офигеть.
Вы зачем кластерный индекс на обновляемом поле построили?
17 фев 14, 09:56    [15575481]     Ответить | Цитировать Сообщить модератору
 Re: Скорость выполнения команды UPDATE  [new]
Евгений_lea
Member

Откуда:
Сообщений: 75
Я не стоил этот индекс, он создался автоматом при создание таблицы на id_object.
17 фев 14, 10:00    [15575500]     Ответить | Цитировать Сообщить модератору
 Re: Скорость выполнения команды UPDATE  [new]
Евгений_lea
Member

Откуда:
Сообщений: 75
tpg
Евгений_lea
транзакции не используются вообще. Может сеть перегружена.
Ну, кроме явных есть и неявные транзакции.
Если вы перед тем же апдейтом не написали Begin Tran, сервер все равно завернет эту операцию в неявную транзакцию.

Т.е. получается другие клиенты при этой же команде блокируют.
17 фев 14, 10:04    [15575516]     Ответить | Цитировать Сообщить модератору
 Re: Скорость выполнения команды UPDATE  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
Евгений_lea
tpg
пропущено...
Ну, кроме явных есть и неявные транзакции.
Если вы перед тем же апдейтом не написали Begin Tran, сервер все равно завернет эту операцию в неявную транзакцию.

Т.е. получается другие клиенты при этой же команде блокируют.
Пока можно только гадать.
Нужно:
1. План выполнения, да и сам запрос (если он не такой, как в первой теме)
2. Структура таблицы, включая все индексы и т.п.
3. Понимание, что происходит на сервере; лучше всего - кто кого блокирует, запросы с планами.
17 фев 14, 10:45    [15575731]     Ответить | Цитировать Сообщить модератору
 Re: Скорость выполнения команды UPDATE  [new]
Glory
Member

Откуда:
Сообщений: 104760
Евгений_lea
Я не стоил этот индекс, он создался автоматом при создание таблицы на id_object.

Автоматом ничего не создается. Тем более кластерный индекс.
17 фев 14, 11:07    [15575871]     Ответить | Цитировать Сообщить модератору
 Re: Скорость выполнения команды UPDATE  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Евгений_lea,

Блокировки можете посмотреть натравив на свой запрос Profiler, в котором выбрать соответствующие события (категория Locks), и соответствующие фильтры, например, по SPID того процесса в котором выполняете свой запрос (в окне запроса SSMS, select @@spid, чтобы его узнать).

Само по себе обновление ключа кластерного индекса может иметь много побочных эффектов, например, нужно обновить соответствующие не кластерные индексы, или если индекс используется для обновления самого себя, то будет Halloween Protection, и наконец другие интересные вещи связанные с обновлениями вроде оптимизации non-updating updates.
17 фев 14, 13:59    [15577073]     Ответить | Цитировать Сообщить модератору
 Re: Скорость выполнения команды UPDATE  [new]
Евгений_lea
Member

Откуда:
Сообщений: 75
alexeyvg,

CREATE TABLE [dbo].[objs](
	[id_object] [int] IDENTITY(1,1) NOT NULL,
	[name_object] [nvarchar](max) NOT NULL,
	[comment] [nvarchar](max) NOT NULL,
	[type_card] [int] NOT NULL,
	[card_id] [int] NOT NULL,
	[parent] [int] NOT NULL,
	[locked_id] [int] NOT NULL,
	[type_id] [int] NOT NULL,
	[inherit] [bit] NOT NULL,
 CONSTRAINT [PK_objs] PRIMARY KEY CLUSTERED 
(
	[id_object] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]


Структура таблицы простенькая, запрос тот же. Почему-то тормозит только на UPDATE-х.( Одно значение в одной строке).
Профайлер показывет частые SELECT-ы от разных пользователей, может из-за этого?
18 фев 14, 07:53    [15580226]     Ответить | Цитировать Сообщить модератору
 Re: Скорость выполнения команды UPDATE  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Ну, а теперь осталось план привести.
18 фев 14, 08:04    [15580234]     Ответить | Цитировать Сообщить модератору
 Re: Скорость выполнения команды UPDATE  [new]
Евгений_lea
Member

Откуда:
Сообщений: 75
SomewhereSomehow
Евгений_lea,

Блокировки можете посмотреть натравив на свой запрос Profiler, в котором выбрать соответствующие события (категория Locks), и соответствующие фильтры, например, по SPID того процесса в котором выполняете свой запрос (в окне запроса SSMS, select @@spid, чтобы его узнать).


профайлер показывает:
Lock: Acquited
Lock: Timeout - сдесь стоит
Lock: Released
Lock: Released
Lock: Released
SQL:BatchCompleted
18 фев 14, 08:23    [15580253]     Ответить | Цитировать Сообщить модератору
 Re: Скорость выполнения команды UPDATE  [new]
Евгений_lea
Member

Откуда:
Сообщений: 75
tpg,

Я полагаю этот план

К сообщению приложен файл. Размер - 7Kb
18 фев 14, 08:30    [15580264]     Ответить | Цитировать Сообщить модератору
 Re: Скорость выполнения команды UPDATE  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
Евгений_lea
Структура таблицы простенькая
А индексов нету на таблице?

Евгений_lea
Профайлер показывет частые SELECT-ы от разных пользователей, может из-за этого?
Короткие транзакции не могут мешать, ищите длинные транзакции, которые мешают этому апдэйту.

Понятно, это непросто поймать, но что делать...
Следите профайлером. Установите параметры профайлера, что бы не показывать ничего лишнего (те же Lock слишком подробные), но что бы было видно текущее наличие транзакций.
18 фев 14, 09:55    [15580559]     Ответить | Цитировать Сообщить модератору
 Re: Скорость выполнения команды UPDATE  [new]
Евгений_lea
Member

Откуда:
Сообщений: 75
alexeyvg,

Индекс по ID

К сообщению приложен файл. Размер - 4Kb
18 фев 14, 10:26    [15580698]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить