Advertisement
Guest User

Untitled

a guest
Jun 25th, 2019
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.93 KB | None | 0 0
  1. DECLARE @T TABLE(X INT)
  2.  
  3. INSERT INTO @T VALUES(1),(2)
  4.  
  5. SELECT sys.fn_PhysLocFormatter(%%physloc%%) AS [File:Page:Slot]
  6. FROM @T
  7.  
  8. File:Page:Slot
  9. ----------------
  10. (1:148:0)
  11. (1:148:1)
  12.  
  13. IF (1 = 0)
  14. BEGIN
  15. DECLARE @T TABLE(X INT)
  16. END
  17.  
  18. --Works fine
  19. SELECT *
  20. FROM @T
  21.  
  22. /*Declare a table variable with some unusual options.*/
  23. DECLARE @T TABLE
  24. (
  25. [dba.se] INT IDENTITY PRIMARY KEY NONCLUSTERED,
  26. A INT CHECK (A > 0),
  27. B INT DEFAULT 1,
  28. InRowFiller char(1000) DEFAULT REPLICATE('A',1000),
  29. OffRowFiller varchar(8000) DEFAULT REPLICATE('B',8000),
  30. LOBFiller varchar(max) DEFAULT REPLICATE(cast('C' as varchar(max)),10000),
  31. UNIQUE CLUSTERED (A,B)
  32. WITH (FILLFACTOR = 80,
  33. IGNORE_DUP_KEY = ON,
  34. DATA_COMPRESSION = PAGE,
  35. ALLOW_ROW_LOCKS=ON,
  36. ALLOW_PAGE_LOCKS=ON)
  37. )
  38.  
  39. INSERT INTO @T (A)
  40. VALUES (1),(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13)
  41.  
  42. SELECT t.object_id,
  43. t.name,
  44. p.rows,
  45. a.type_desc,
  46. a.total_pages,
  47. a.used_pages,
  48. a.data_pages,
  49. p.data_compression_desc
  50. FROM tempdb.sys.partitions AS p
  51. INNER JOIN tempdb.sys.system_internals_allocation_units AS a
  52. ON p.hobt_id = a.container_id
  53. INNER JOIN tempdb.sys.tables AS t
  54. ON t.object_id = p.object_id
  55. INNER JOIN tempdb.sys.columns AS c
  56. ON c.object_id = p.object_id
  57. WHERE c.name = 'dba.se'
  58.  
  59. Duplicate key was ignored.
  60.  
  61. +-----------+-----------+------+-------------------+-------------+------------+------------+-----------------------+
  62. | object_id | name | rows | type_desc | total_pages | used_pages | data_pages | data_compression_desc |
  63. +-----------+-----------+------+-------------------+-------------+------------+------------+-----------------------+
  64. | 574625090 | #22401542 | 13 | IN_ROW_DATA | 2 | 2 | 1 | PAGE |
  65. | 574625090 | #22401542 | 13 | LOB_DATA | 24 | 19 | 0 | PAGE |
  66. | 574625090 | #22401542 | 13 | ROW_OVERFLOW_DATA | 16 | 14 | 0 | PAGE |
  67. | 574625090 | #22401542 | 13 | IN_ROW_DATA | 2 | 2 | 1 | NONE |
  68. +-----------+-----------+------+-------------------+-------------+------------+------------+-----------------------+
  69.  
  70. DECLARE @T TABLE(X INT)
  71. CREATE TABLE #T(X INT)
  72.  
  73. BEGIN TRAN
  74.  
  75. INSERT #T
  76. OUTPUT INSERTED.X INTO @T
  77. VALUES(1),(2),(3)
  78.  
  79. /*Both have 3 rows*/
  80. SELECT * FROM #T
  81. SELECT * FROM @T
  82.  
  83. ROLLBACK
  84.  
  85. /*Only table variable now has rows*/
  86. SELECT * FROM #T
  87. SELECT * FROM @T
  88. DROP TABLE #T
  89.  
  90. USE tempdb;
  91.  
  92. /*
  93. Don't run this on a busy server.
  94. Ideally should be no concurrent activity at all
  95. */
  96. CHECKPOINT;
  97.  
  98. GO
  99.  
  100. /*
  101. The 2nd column is binary to allow easier correlation with log output shown later*/
  102. DECLARE @T TABLE ([C71ACF0B-47E9-4CAD-9A1E-0C687A8F9CF3] INT, B BINARY(10))
  103.  
  104. INSERT INTO @T
  105. VALUES (1, 0x41414141414141414141),
  106. (2, 0x41414141414141414141)
  107.  
  108. UPDATE @T
  109. SET B = 0x42424242424242424242
  110.  
  111. DELETE FROM @T
  112.  
  113. /*Put allocation_unit_id into CONTEXT_INFO to access in next batch*/
  114. DECLARE @allocId BIGINT, @Context_Info VARBINARY(128)
  115.  
  116. SELECT @Context_Info = allocation_unit_id,
  117. @allocId = a.allocation_unit_id
  118. FROM sys.system_internals_allocation_units a
  119. INNER JOIN sys.partitions p
  120. ON p.hobt_id = a.container_id
  121. INNER JOIN sys.columns c
  122. ON c.object_id = p.object_id
  123. WHERE ( c.name = 'C71ACF0B-47E9-4CAD-9A1E-0C687A8F9CF3' )
  124.  
  125. SET CONTEXT_INFO @Context_Info
  126.  
  127. /*Check log for records related to modifications of table variable itself*/
  128. SELECT Operation,
  129. Context,
  130. AllocUnitName,
  131. [RowLog Contents 0],
  132. [Log Record Length]
  133. FROM fn_dblog(NULL, NULL)
  134. WHERE AllocUnitId = @allocId
  135.  
  136. GO
  137.  
  138. /*Check total log usage including updates against system tables*/
  139. DECLARE @allocId BIGINT = CAST(CONTEXT_INFO() AS BINARY(8));
  140.  
  141. WITH T
  142. AS (SELECT Operation,
  143. Context,
  144. CASE
  145. WHEN AllocUnitId = @allocId THEN 'Table Variable'
  146. WHEN AllocUnitName LIKE 'sys.%' THEN 'System Base Table'
  147. ELSE AllocUnitName
  148. END AS AllocUnitName,
  149. [Log Record Length]
  150. FROM fn_dblog(NULL, NULL) AS D)
  151. SELECT Operation = CASE
  152. WHEN GROUPING(Operation) = 1 THEN 'Total'
  153. ELSE Operation
  154. END,
  155. Context,
  156. AllocUnitName,
  157. [Size in Bytes] = COALESCE(SUM([Log Record Length]), 0),
  158. Cnt = COUNT(*)
  159. FROM T
  160. GROUP BY GROUPING SETS( ( Operation, Context, AllocUnitName ), ( ) )
  161. ORDER BY GROUPING(Operation),
  162. AllocUnitName
  163.  
  164. DECLARE @T TABLE(I INT);
  165.  
  166. INSERT INTO @T VALUES(1),(2),(3),(4),(5)
  167.  
  168. CREATE TABLE #T(I INT)
  169.  
  170. /*Reference to #T means this statement is subject to deferred compile*/
  171. SELECT * FROM @T WHERE NOT EXISTS(SELECT * FROM #T)
  172.  
  173. DROP TABLE #T
  174.  
  175. DECLARE @tv_target TABLE (c11 int, c22 char(100))
  176.  
  177. DBCC TRACEON(1200,-1,3604)
  178.  
  179. INSERT INTO @tv_target (c11, c22)
  180.  
  181. VALUES (1, REPLICATE('A',100)), (2, REPLICATE('A',100))
  182.  
  183. DBCC TRACEOFF(1200,-1,3604)
  184.  
  185. DECLARE @T TABLE(X INT);
  186.  
  187. SELECT X
  188. FROM @T
  189. OPTION (RECOMPILE, QUERYTRACEON 3604, QUERYTRACEON 8607)
  190.  
  191. *** Output Tree: (trivial plan) ***
  192.  
  193. PhyOp_TableScan TBL: @T Bmk ( Bmk1000) IsRow: COL: IsBaseRow1002 Hints( NOLOCK )
  194.  
  195. SET NOCOUNT ON;
  196.  
  197. CREATE TABLE #T( [ID] [int] IDENTITY NOT NULL,
  198. [Filler] [char](8000) NULL,
  199. PRIMARY KEY CLUSTERED ([ID] DESC))
  200.  
  201.  
  202. DECLARE @T TABLE ( [ID] [int] IDENTITY NOT NULL,
  203. [Filler] [char](8000) NULL,
  204. PRIMARY KEY CLUSTERED ([ID] DESC))
  205.  
  206. DECLARE @I INT = 0
  207.  
  208. WHILE (@I < 10000)
  209. BEGIN
  210. INSERT INTO #T DEFAULT VALUES
  211. INSERT INTO @T DEFAULT VALUES
  212. SET @I += 1
  213. END
  214.  
  215. /*Run once so compilation output doesn't appear in lock output*/
  216. EXEC('SELECT *, sys.fn_PhysLocFormatter(%%physloc%%) FROM #T')
  217.  
  218. DBCC TRACEON(1200,3604,-1)
  219. SELECT *, sys.fn_PhysLocFormatter(%%physloc%%)
  220. FROM @T
  221.  
  222. PRINT '--*--'
  223.  
  224. EXEC('SELECT *, sys.fn_PhysLocFormatter(%%physloc%%) FROM #T')
  225.  
  226. DBCC TRACEOFF(1200,3604,-1)
  227.  
  228. DROP TABLE #T
  229.  
  230. Process 58 acquiring Sch-S lock on OBJECT: 2:-1325894110:0 (class bit0 ref1) result: OK
  231.  
  232. --*--
  233. Process 58 acquiring IS lock on OBJECT: 2:-1293893996:0 (class bit0 ref1) result: OK
  234.  
  235. Process 58 acquiring S lock on OBJECT: 2:-1293893996:0 (class bit0 ref1) result: OK
  236.  
  237. Process 58 releasing lock on OBJECT: 2:-1293893996:0
  238.  
  239. --BEGIN TRAN;
  240.  
  241. CREATE TABLE #T (X INT,Y CHAR(4000) NULL);
  242.  
  243. INSERT INTO #T (X) VALUES(1)
  244.  
  245. SELECT CASE resource_type
  246. WHEN 'OBJECT' THEN OBJECT_NAME(resource_associated_entity_id, 2)
  247. WHEN 'ALLOCATION_UNIT' THEN (SELECT OBJECT_NAME(object_id, 2)
  248. FROM tempdb.sys.allocation_units a
  249. JOIN tempdb.sys.partitions p ON a.container_id = p.hobt_id
  250. WHERE a.allocation_unit_id = resource_associated_entity_id)
  251. WHEN 'DATABASE' THEN DB_NAME(resource_database_id)
  252. ELSE (SELECT OBJECT_NAME(object_id, 2)
  253. FROM tempdb.sys.partitions
  254. WHERE partition_id = resource_associated_entity_id)
  255. END AS object_name,
  256. *
  257. FROM sys.dm_tran_locks
  258. WHERE request_session_id = @@SPID
  259.  
  260. DROP TABLE #T
  261.  
  262. -- ROLLBACK
  263.  
  264. DECLARE @T TABLE (
  265. C1 INT INDEX IX1 CLUSTERED, /*Single column indexes can be declared next to the column*/
  266. C2 INT INDEX IX2 NONCLUSTERED,
  267. INDEX IX3 NONCLUSTERED(C1,C2) /*Example composite index*/
  268. );
  269.  
  270. DECLARE @T TABLE
  271. (
  272. c1 INT NULL INDEX ix UNIQUE WHERE c1 IS NOT NULL /*Unique ignoring nulls*/
  273. )
  274.  
  275. INSERT INTO @DATA ( ... )
  276. EXEC('SELECT .. FROM ...')
  277.  
  278. CREATE TABLE #T(X INT, Filler char(8000) NULL)
  279. INSERT INTO #T(X)
  280. SELECT TOP 250 ROW_NUMBER() OVER (ORDER BY @@SPID)
  281. FROM master..spt_values
  282. DROP TABLE #T
  283.  
  284. DECLARE @T TABLE (
  285. X INT,
  286. [dba.se] CHAR(8000) NULL)
  287.  
  288. INSERT INTO @T
  289. (X)
  290. SELECT TOP 251 Row_number() OVER (ORDER BY (SELECT 0))
  291. FROM master..spt_values
  292.  
  293. SELECT is_modified,
  294. Count(*) AS page_count
  295. FROM sys.dm_os_buffer_descriptors
  296. WHERE database_id = 2
  297. AND allocation_unit_id = (SELECT a.allocation_unit_id
  298. FROM tempdb.sys.partitions AS p
  299. INNER JOIN tempdb.sys.system_internals_allocation_units AS a
  300. ON p.hobt_id = a.container_id
  301. INNER JOIN tempdb.sys.columns AS c
  302. ON c.object_id = p.object_id
  303. WHERE c.name = 'dba.se')
  304. GROUP BY is_modified
  305.  
  306. is_modified page_count
  307. ----------- -----------
  308. 0 192
  309. 1 61
  310.  
  311. SELECT Count(*)
  312. FROM sys.dm_os_buffer_descriptors
  313. WHERE database_id = 2
  314. AND allocation_unit_id = @allocId
  315. AND page_type = 'DATA_PAGE'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement