Блокировка адресов и адресов страниц не совпадают - PullRequest
0 голосов
/ 15 марта 2020

Сегодня я обнаружил команду DBCC PAGE(). Я понимаю, что он отображает информацию о данных, хранящихся на уровне страницы.

(Этот вопрос о SQL Server 2017 - v14.0)

Вот что я делаю:

  1. Я хочу получить данные из моей таблицы с именем user
  2. . Я получаю доступ к номеру страницы и номеру файла этой таблицы, используя DBCC IND()
DBCC IND('gescom', 'user', -1)
Результат предыдущей команды:
PageFID PagePID     IAMFID IAMPID      ObjectID    IndexID     PartitionNumber PartitionID          iam_chain_type       PageType IndexLevel NextPageFID NextPagePID PrevPageFID PrevPagePID
------- ----------- ------ ----------- ----------- ----------- --------------- -------------------- -------------------- -------- ---------- ----------- ----------- ----------- -----------
4       8           NULL   NULL        917578307   0           1               72057594043105280    In-row data          10       NULL       0           0           0           0
5       8           4      8           917578307   0           1               72057594043105280    In-row data          1        0          0           0           0           0
Я ищу данные во второй строке, так как это строка с PageType = 1 (страница данных) Поэтому я использую команду DBCC PAGE со следующими параметрами: database = ' gescom ', номер файла = 5, номер страницы = 8, опция отображения = 3
DBCC TRACEON(3604) -- Activate display trace
DBCC PAGE('gescom', 5, 8, 3)
Результат предыдущей команды (усеченный результат ...):
Page @0x0000018E2D3D6000
[...]
Memory Dump @0x0000005DD33FA000

0000005DD33FA000:   01010000 08020001 00000000 00001400 00000000  ....................
0000005DD33FA014:   00000400 b1000000 8a1e3f03 08000000 05000000  ....±....?.........
0000005DD33FA028:   26000000 b00f0000 6b000000 2a100000 00000000  &...°...k...*.......
0000005DD33FA03C:   70954bd5 00000000 00000000 00000000 00000000  pKÕ................
0000005DD33FA050:   00000000 00000000 00000000 00000000 30001400  ................0...
0000005DD33FA064:   b6ec768b aadc3c49 9ef64911 a2bb0766 04000003  ¶ìvªÜ<IöI.¢».f....
0000005DD33FA078:   00290031 0041004a 65616e4d 69636865 6c427570  .).1.A.JeanMichelBup
0000005DD33FA08C:   7550554f 494a6561 6e4d6940 7961686f 6f2e636f  uPUOIJeanMi@yahoo.co
0000005DD33FA0A0:   6d300014 0076cf59 d2c044d1 49866422 8f4afddf  m0...vÏYÒÀDÑId".Jýß

Затем я наконец пытаюсь обновить эти данные:

BEGIN TRAN T1

UPDATE [USER] 
SET pseudo = 'newPseudo' 
WHERE email LIKE '%Mi%'

Затем я Я хочу увидеть, по какому адресу установлена ​​блокировка, поэтому я запускаю следующий запрос, пока не завершаю предыдущую транзакцию:

SELECT * FROM sys.dm_tran_locks

Вот результат (посмотрите на столбец lock_owner_address):

resource_type                                                resource_subtype                                             resource_database_id resource_description                                                                                                                                                                                                                                             resource_associated_entity_id resource_lock_partition request_mode                                                 request_type                                                 request_status                                               request_reference_count request_lifetime request_session_id request_exec_context_id request_request_id request_owner_type                                           request_owner_id     request_owner_guid                   request_owner_lockspace_id       lock_owner_address
------------------------------------------------------------ ------------------------------------------------------------ -------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------- ----------------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------ ----------------------- ---------------- ------------------ ----------------------- ------------------ ------------------------------------------------------------ -------------------- ------------------------------------ -------------------------------- ------------------
DATABASE                                                                                                                  5                                                                                                                                                                                                                                                                                     0                             0                       S                                                            LOCK                                                         GRANT                                                        1                       0                57                 0                       0                  SHARED_TRANSACTION_WORKSPACE                                 0                    00000000-0000-0000-0000-000000000000 0x0000018E3B366130:0:0           0x0000018E36E1AE80
PAGE                                                                                                                      5                    5:8                                                                                                                                                                                                                                                              72057594043105280             0                       IX                                                           LOCK                                                         GRANT                                                        0                       33554432         57                 0                       0                  TRANSACTION                                                  218160               00000000-0000-0000-0000-000000000000 0x0000018E3B366130:1:1           0x0000018E2D61E380
OBJECT                                                                                                                    5                                                                                                                                                                                                                                                                                     917578307                     0                       IX                                                           LOCK                                                         GRANT                                                        1                       33554432         57                 0                       0                  TRANSACTION                                                  218160               00000000-0000-0000-0000-000000000000 0x0000018E3B366130:1:1           0x0000018E2D61D9C0

Здесь я не могу понять, почему адрес блокировки объекта отличается (= 0x0000018E2D61D9C0) от адреса, ранее замеченного с помощью команды DB CC PAGE (= 0000005DD33FA078)?

Я вижу, что номер страницы совпадает: @ 0x0000018E2D 3D6000, но я не могу понять, почему адрес блокировки объекта не совпадает ни с одним адресом в результате DBCC PAGE ...

Пожалуйста подскажите где я делаю что то не так: |

...