Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 COMPILE lock on the procedure: объясните плиз фразу из БОЛ  [new]
-g-g-g-
Guest
By not qualifying the owner name, SQL Server enters the compile code and acquires a COMPILE lock on the procedure. However, eventually it determines that a new plan is not required (assuming no other reasons apply), so it does NOT recompile the plan at this point due to the lack of qualification. However, the extra step of getting a COMPILE lock on the procedure can cause blocking contention in severe situations. Refer to Q263889 INF: SQL Blocking Due to [[COMPILE]] Locks for more details on this situation

не понимаю, на что лок накладывается,
объясните пожалуйста.
пишут, что на процедуру, но ведь сами же пишут, что случается это когда сервер еще не понял,
какую именно прецедуру вызывают, если схему не указали.
как можно наложить лок на то, не знаю еще пока на что?

http://support.microsoft.com/kb/243586/en-us
18 апр 12, 13:59    [12432899]     Ответить | Цитировать Сообщить модератору
 Re: COMPILE lock on the procedure: объясните плиз фразу из БОЛ  [new]
step_ks
Member

Откуда:
Сообщений: 936
статью Q263889 чтож не поискали для начала?
Description of SQL Server blocking caused by compile locks
18 апр 12, 14:29    [12433148]     Ответить | Цитировать Сообщить модератору
 Re: COMPILE lock on the procedure: объясните плиз фразу из БОЛ  [new]
-g-g-g-
Guest
step_ks,

не поверите, не знаю, как ее на том сайте искать.
когда в виде ссылки оформлено, читаю, а когда нет, не знаю, как по номеру найти.
или нaдо просто в адресе поменять номер статьи?
18 апр 12, 14:35    [12433207]     Ответить | Цитировать Сообщить модератору
 Re: COMPILE lock on the procedure: объясните плиз фразу из БОЛ  [new]
step_ks
Member

Откуда:
Сообщений: 936
ну прибили, видать старую ссылку, да. Гугл по "Q263889" находит преемника первым результатом.
18 апр 12, 14:38    [12433252]     Ответить | Цитировать Сообщить модератору
 Re: COMPILE lock on the procedure: объясните плиз фразу из БОЛ  [new]
step_ks
Member

Откуда:
Сообщений: 936
да и поиск на microsoft.com не подводит
18 апр 12, 14:40    [12433284]     Ответить | Цитировать Сообщить модератору
 Re: COMPILE lock on the procedure: объясните плиз фразу из БОЛ  [new]
-g-g-g-
Guest
ок, теперь читаю соседнюю статью и продолжаю не понимать:

For example, if user "dbo" owns object dbo.mystoredproc and another user, "Harry," runs this stored procedure by using the command "exec mystoredproc," the initial cache lookup by object name fails because the object is not owner-qualified. (It is not yet known whether another stored procedure named Harry.mystoredproc exists.

про какой кэш тут говорится?
в который планы попадают?
так от процедуры же не имя, а текст попадает...
18 апр 12, 14:41    [12433301]     Ответить | Цитировать Сообщить модератору
 Re: COMPILE lock on the procedure: объясните плиз фразу из БОЛ  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31965
-g-g-g-
не понимаю, на что лок накладывается,
объясните пожалуйста.
пишут, что на процедуру, но ведь сами же пишут, что случается это когда сервер еще не понял,
какую именно прецедуру вызывают, если схему не указали.
как можно наложить лок на то, не знаю еще пока на что?

http://support.microsoft.com/kb/243586/en-us
Может, имеется в виду, что он ищет все процедуры и их блокирует по мере нахождения?
18 апр 12, 15:01    [12433475]     Ответить | Цитировать Сообщить модератору
 Re: COMPILE lock on the procedure: объясните плиз фразу из БОЛ  [new]
-g-g-g-
Guest
alexeyvg,

вот вообще не понимаю, что и где блокируется.
сами в начале статьи пишут:

In Microsoft SQL Server, only one copy of a stored procedure plan is generally in cache at a time. Enforcing this requires serialization of some parts of the compilation process, and this synchronization is accomplished in part by using compile locks.

вроде как должен быть 1 план в кэше, поэтому лок накладывается.
чтобы план для этой процедуры найти, надо или objectid знать, или текст.
но про текст никто не пишет, а objectid однозначно процедуру определяет.

а если "блокирует процедуру", то это как?
18 апр 12, 15:14    [12433572]     Ответить | Цитировать Сообщить модератору
 Re: COMPILE lock on the procedure: объясните плиз фразу из БОЛ  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
-g-g-g-
а если "блокирует процедуру", то это как?


А что непонятно дальше из статьи:

The following are some typical characteristics of compile blocking that can be observed in the blocking script output:

lastwaittype for the blocked and (usually) blocking SPIDs is LCK_M_X (exclusive) and waitresource is of the form "TAB: dbid:object_id [[COMPILE]]," where "object_id" is the object ID of the stored procedure.
18 апр 12, 16:46    [12434440]     Ответить | Цитировать Сообщить модератору
 Re: COMPILE lock on the procedure: объясните плиз фразу из БОЛ  [new]
Ray D
Member

Откуда: from the middle of nowhere
Сообщений: 3598
Блог
Как писала Дилани в своей книжке по Locking&Blocking (для 2000-го), можно потенциально получить rolling block -- последовательное выполнение процедуры.
18 апр 12, 17:03    [12434571]     Ответить | Цитировать Сообщить модератору
 Re: COMPILE lock on the procedure: объясните плиз фразу из БОЛ  [new]
-g-g-g-
Guest
pkarklin,

не понимаю, где блокируют, потому что не знаю, где процедуры обитают.
18 апр 12, 17:19    [12434709]     Ответить | Цитировать Сообщить модератору
 Re: COMPILE lock on the procedure: объясните плиз фразу из БОЛ  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
-g-g-g-
не понимаю, где блокируют, потому что не знаю, где процедуры обитают.


Что значит "где"?! В Вашем понятии блокировка - эта некая физическая сущность?
18 апр 12, 18:12    [12435064]     Ответить | Цитировать Сообщить модератору
 Re: COMPILE lock on the procedure: объясните плиз фразу из БОЛ  [new]
-g-g-g-
Guest
для меня это такой черный ящик который при попытке прочесть/записать данные то разрешает, то ставит в очередь.
а как оно реализовано честно не знаю
18 апр 12, 18:17    [12435102]     Ответить | Цитировать Сообщить модератору
 Re: COMPILE lock on the procedure: объясните плиз фразу из БОЛ  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Погуглите: Inside Microsoft® SQL Server™ By Kalen Delaney: The Storage Engine By Kalen Delaney

Цитата из раздела: Internal Locking Architecture

автор
Locks are not on-disk structures. You won't find a lock field directly on a data page or a table header, and the metadata that keeps track of locks is never written to disk. Locks are internal memory structuresthey consume part of the memory used for SQL Server. A lock is identified by lock resource, which is a description of the resource that is locked (a row, index key, page, or table). To keep track of the database, the type of lock, and the information describing the locked resource, each lock requires 64 bytes of memory on a 32-bit system and 128 bytes of memory on a 64-bit system. This 64-byte or 128 byte structure is called a lock block.

Each process holding a lock also must have a lock owner, which represents the relationship between a lock and the entity that is requesting or holding the lock. The lock owner requires 32 bytes of memory on a 32-bit system and 64 bytes of memory on a 64-bit system. This 32-byte or 64-byte structure is called a lock owner block. A single transaction can have multiple lock owner blocks; a scrollable cursor sometimes uses several. Also, one lock can have many lock owner blocks, as is the case with a shared lock. As mentioned, the lock owner represents a relationship between a lock and an entity, and the relationship can be granted, waiting, or in a state called waiting-to-convert.

The lock manager maintains a lock hash table. Lock resources, contained within a lock block, are hashed to determine a target hash slot in the hash table. All lock blocks that hash to the same slot are chained together from one entry in the hash table. Each lock block contains a 15-byte field that describes the locked resource. The lock block also contains pointers to lists of lock owner blocks. There is a separate list for lock owners in each of the three states.
18 апр 12, 18:24    [12435137]     Ответить | Цитировать Сообщить модератору
 Re: COMPILE lock on the procedure: объясните плиз фразу из БОЛ  [new]
-g-g-g-
Guest
pkarklin,

спасибо. поищу.
а в свете процитированного, правильно ли я понимаю, что "блокирует процедуру" значит помещает в эту таблицу хэш (имени?) процедуры?
(вместе с типом и хозяином блокировки)
18 апр 12, 18:35    [12435200]     Ответить | Цитировать Сообщить модератору
 Re: COMPILE lock on the procedure: объясните плиз фразу из БОЛ  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
автор
правильно ли я понимаю, что "блокирует процедуру" значит помещает в эту таблицу хэш (имени?) процедуры?


Вам стОит поискать и почитать...
19 апр 12, 08:25    [12436879]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить