Guest User

Untitled

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