यह अंतर केवल तब लागू होता है जब वस्तु B + वृक्ष हो। primary key
टेबल चर पर हटाते समय यह एक ढेर है मुझे निम्नलिखित परिणाम मिले
2560
2120
2080
2130
2140
लेकिन पीके के साथ मुझे अपने परीक्षणों में एक समान पैटर्न मिला और साथ ही नीचे दिए गए विशिष्ट परिणामों के साथ।
+--------+--------+---------+-------------------+
| @table | #table | ##table | [permanent_table] |
+--------+--------+---------+-------------------+
| 2670 | 2683 | 9603 | 9703 |
| 6823 | 6840 | 9723 | 9790 |
| 6813 | 6816 | 9626 | 9703 |
| 6883 | 6816 | 9600 | 9716 |
| 6840 | 6856 | 9610 | 9673 |
+--------+--------+---------+-------------------+
मेरा सिद्धांत है कि स्थानीय अस्थायी B + पेड़ों पर थोक आवेषण करते समय कुछ अनुकूलन उपलब्ध है जो केवल तब लागू होता है जब यह पहले से ही आवंटित पृष्ठों को नहीं करता है।
मैं इसे निम्नलिखित टिप्पणियों पर आधारित करता हूं।
जब अपने परीक्षण कोड के विभिन्न संस्करणों चल मैं केवल के साथ इस पैटर्न देखा @table_variables
और #temp
टेबल। में नहीं स्थायी टेबल tempdb
है और न ही ##
टेबल।
धीमे प्रदर्शन को पाने के लिए पहले से बड़ी संख्या में पंक्तियों को जोड़ना और हटाना आवश्यक नहीं है। बस एक ही पंक्ति को जोड़ने और इसे वहां छोड़ने के लिए पर्याप्त है।
TRUNCATE
तालिका से सभी पृष्ठ हटाता है। DELETE
तालिका के अंतिम पृष्ठ को अस्वीकृत नहीं किया जाएगा।
वीएस 2012 प्रोफाइलर का उपयोग करना दिखाता है कि तेज मामले में SQL सर्वर एक अलग कोड पथ का उपयोग करता है। में 36% समय व्यतीत होता हैsqlmin.dll!RowsetBulk::InsertRow
sqlmin.dll!RowsetNewSS::InsertRow
धीमे मामले के लिए खर्च किए गए समय के बनाम 61% में खर्च किया जाता है।
चल रहा है
SELECT *
FROM sys.dm_db_index_physical_stats(2,OBJECT_ID('tempdb..#values'),1,NULL, 'DETAILED')
हटाने के बाद
+-------------+------------+--------------+--------------------+
| index_level | page_count | record_count | ghost_record_count |
+-------------+------------+--------------+--------------------+
| 0 | 1 | 0 | 1 |
| 1 | 1 | 1 | 0 |
| 2 | 1 | 1 | 0 |
+-------------+------------+--------------+--------------------+
मैंने पाया कि समय की विसंगति को कुछ हद तक कम करना संभव था ट्रेस ध्वज 610 सक्षम ।
इसके बाद के आवेषणों के लिए लॉगिंग की मात्रा को कम करने का प्रभाव था (350 एमबी से 103 एमबी तक नीचे क्योंकि यह अब व्यक्तिगत सम्मिलित पंक्ति मूल्यों को लॉग नहीं करता है), लेकिन इससे केवल दूसरे और बाद के लिए समय में मामूली सुधार हुआ @table
,#table
मामलों के और अंतर अभी भी बना हुआ है। ट्रेस ध्वज ने आवेषण के सामान्य प्रदर्शन को अन्य दो तालिका प्रकारों में महत्वपूर्ण रूप से सुधार दिया।
+--------+--------+---------+-------------------+
| @table | #table | ##table | [permanent_table] |
+--------+--------+---------+-------------------+
| 2663 | 2670 | 5403 | 5426 |
| 5390 | 5396 | 5410 | 5403 |
| 5373 | 5390 | 5410 | 5403 |
| 5393 | 5410 | 5406 | 5433 |
| 5386 | 5396 | 5390 | 5420 |
+--------+--------+---------+-------------------+
लेन-देन लॉग में देखने से मैंने देखा कि खाली स्थानीय अस्थायी तालिकाओं के खिलाफ प्रारंभिक आवेषण और भी कम से कम लॉग इन (96 एमबी पर) लगते हैं।
विशेष रूप से इन तेज़ आवेषण में धीमे मामलों की तुलना में केवल 657
लेनदेन ( LOP_BEGIN_XACT
/ LOP_COMMIT_XACT
जोड़े) थे 10,000
। विशेष रूप से LOP_FORMAT_PAGE
संचालन में बहुत कम लगता है। धीमे मामलों में 10,270
केवल इसके साथ तुलना में तालिका (प्रत्येक) के प्रत्येक पृष्ठ के लिए इसके लिए लेनदेन लॉग प्रविष्टि है4
में फास्ट ऐसी प्रविष्टियों ।
सभी तीन मामलों में उपयोग किए गए लॉग निम्नानुसार थे (मैंने पाठ की मात्रा को कम करने के लिए सिस्टम बेस तालिकाओं में अपडेट के लिए लॉग रिकॉर्ड को हटा दिया है लेकिन वे अभी भी योग में शामिल हैं)
@table_var
(96.5 एमबी) के खिलाफ पहली प्रविष्टि लॉगिंग
+-----------------------+----------+----------------------------------------------+---------------+---------+
| Operation | Context | AllocUnitName | Size in Bytes | Cnt |
+-----------------------+----------+----------------------------------------------+---------------+---------+
| LOP_BEGIN_XACT | LCX_NULL | NULL | 83876 | 658 |
| LOP_COMMIT_XACT | LCX_NULL | NULL | 34164 | 657 |
| LOP_CREATE_ALLOCCHAIN | LCX_NULL | NULL | 120 | 3 |
| LOP_FORMAT_PAGE | LCX_HEAP | dbo.#531856C7 | 84 | 1 |
| LOP_FORMAT_PAGE | LCX_IAM | dbo.#4F47C5E3.PK__#4F47C5E__3213E83F51300E55 | 84 | 1 |
| LOP_FORMAT_PAGE | LCX_IAM | dbo.#531856C7 | 84 | 1 |
| LOP_FORMAT_PAGE | LCX_IAM | Unknown Alloc Unit | 84 | 1 |
| LOP_HOBT_DDL | LCX_NULL | NULL | 216 | 6 |
| LOP_HOBT_DELTA | LCX_NULL | NULL | 320 | 5 |
| LOP_IDENT_NEWVAL | LCX_NULL | NULL | 100240000 | 2506000 |
| LOP_INSERT_ROWS | LCX_HEAP | dbo.#531856C7 | 72 | 1 |
| LOP_MODIFY_ROW | LCX_IAM | dbo.#531856C7 | 88 | 1 |
| LOP_MODIFY_ROW | LCX_PFS | dbo.#4F47C5E3.PK__#4F47C5E__3213E83F51300E55 | 158592 | 1848 |
| LOP_MODIFY_ROW | LCX_PFS | dbo.#531856C7 | 80 | 1 |
| LOP_MODIFY_ROW | LCX_PFS | Unknown Alloc Unit | 216016 | 2455 |
| LOP_SET_BITS | LCX_GAM | dbo.#4F47C5E3.PK__#4F47C5E__3213E83F51300E55 | 84360 | 1406 |
| LOP_SET_BITS | LCX_GAM | Unknown Alloc Unit | 147120 | 2452 |
| LOP_SET_BITS | LCX_IAM | dbo.#4F47C5E3.PK__#4F47C5E__3213E83F51300E55 | 84360 | 1406 |
| LOP_SET_BITS | LCX_IAM | Unknown Alloc Unit | 147120 | 2452 |
| Total | NULL | NULL | 101209792 | 2519475 |
+-----------------------+----------+----------------------------------------------+---------------+---------+
बाद में आवेषण लॉगिंग TF 610 ऑफ (350 एमबी)
+-----------------------+--------------------+----------------------------------------------+---------------+---------+
| Operation | Context | AllocUnitName | Size in Bytes | Cnt |
+-----------------------+--------------------+----------------------------------------------+---------------+---------+
| LOP_BEGIN_CKPT | LCX_NULL | NULL | 96 | 1 |
| LOP_BEGIN_XACT | LCX_NULL | NULL | 1520696 | 12521 |
| LOP_COMMIT_XACT | LCX_NULL | NULL | 651040 | 12520 |
| LOP_CREATE_ALLOCCHAIN | LCX_NULL | NULL | 40 | 1 |
| LOP_DELETE_SPLIT | LCX_INDEX_INTERIOR | dbo.#4F47C5E3.PK__#4F47C5E__3213E83F51300E55 | 2160 | 36 |
| LOP_END_CKPT | LCX_NULL | NULL | 136 | 1 |
| LOP_FORMAT_PAGE | LCX_HEAP | dbo.#4F47C5E3.PK__#4F47C5E__3213E83F51300E55 | 859236 | 10229 |
| LOP_FORMAT_PAGE | LCX_IAM | Unknown Alloc Unit | 84 | 1 |
| LOP_FORMAT_PAGE | LCX_INDEX_INTERIOR | dbo.#4F47C5E3.PK__#4F47C5E__3213E83F51300E55 | 3108 | 37 |
| LOP_HOBT_DDL | LCX_NULL | NULL | 648 | 18 |
| LOP_HOBT_DELTA | LCX_NULL | NULL | 657088 | 10267 |
| LOP_IDENT_NEWVAL | LCX_NULL | NULL | 100239960 | 2505999 |
| LOP_INSERT_ROWS | LCX_CLUSTERED | dbo.#4F47C5E3.PK__#4F47C5E__3213E83F51300E55 | 258628000 | 2506000 |
| LOP_INSERT_ROWS | LCX_HEAP | dbo.#531856C7 | 72 | 1 |
| LOP_INSERT_ROWS | LCX_INDEX_INTERIOR | dbo.#4F47C5E3.PK__#4F47C5E__3213E83F51300E55 | 1042776 | 10302 |
| LOP_MODIFY_HEADER | LCX_HEAP | dbo.#4F47C5E3.PK__#4F47C5E__3213E83F51300E55 | 859236 | 10229 |
| LOP_MODIFY_HEADER | LCX_INDEX_INTERIOR | dbo.#4F47C5E3.PK__#4F47C5E__3213E83F51300E55 | 3192 | 38 |
| LOP_MODIFY_ROW | LCX_IAM | dbo.#4F47C5E3.PK__#4F47C5E__3213E83F51300E55 | 704 | 8 |
| LOP_MODIFY_ROW | LCX_PFS | dbo.#4F47C5E3.PK__#4F47C5E__3213E83F51300E55 | 934264 | 11550 |
| LOP_MODIFY_ROW | LCX_PFS | Unknown Alloc Unit | 783984 | 8909 |
| LOP_SET_BITS | LCX_GAM | dbo.#4F47C5E3.PK__#4F47C5E__3213E83F51300E55 | 76980 | 1283 |
| LOP_SET_BITS | LCX_GAM | Unknown Alloc Unit | 534480 | 8908 |
| LOP_SET_BITS | LCX_IAM | dbo.#4F47C5E3.PK__#4F47C5E__3213E83F51300E55 | 76980 | 1283 |
| LOP_SET_BITS | LCX_IAM | Unknown Alloc Unit | 534480 | 8908 |
| LOP_SHRINK_NOOP | LCX_NULL | NULL | 32 | 1 |
| LOP_XACT_CKPT | LCX_NULL | NULL | 92 | 1 |
| Total | NULL | NULL | 367438748 | 5119297 |
+-----------------------+--------------------+----------------------------------------------+---------------+---------+
टीएफ 610 पर बाद के आवेषण लॉगिंग (103 एमबी)
+-------------------------+-------------------------+----------------------------------------------+---------------+---------+
| Operation | Context | AllocUnitName | Size in Bytes | Cnt |
+-------------------------+-------------------------+----------------------------------------------+---------------+---------+
| LOP_BEGIN_CKPT | LCX_NULL | NULL | 192 | 2 |
| LOP_BEGIN_XACT | LCX_NULL | NULL | 1339796 | 11099 |
| LOP_BULK_EXT_ALLOCATION | LCX_NULL | NULL | 20616 | 162 |
| LOP_COMMIT_XACT | LCX_NULL | NULL | 577096 | 11098 |
| LOP_CREATE_ALLOCCHAIN | LCX_NULL | NULL | 40 | 1 |
| LOP_DELETE_SPLIT | LCX_INDEX_INTERIOR | dbo.#6DCC4D03.PK__#6DCC4D0__3213E83F6FB49575 | 2160 | 36 |
| LOP_END_CKPT | LCX_NULL | NULL | 272 | 2 |
| LOP_FORMAT_PAGE | LCX_BULK_OPERATION_PAGE | dbo.#6DCC4D03.PK__#6DCC4D0__3213E83F6FB49575 | 863520 | 10280 |
| LOP_FORMAT_PAGE | LCX_IAM | Unknown Alloc Unit | 84 | 1 |
| LOP_FORMAT_PAGE | LCX_INDEX_INTERIOR | dbo.#6DCC4D03.PK__#6DCC4D0__3213E83F6FB49575 | 3108 | 37 |
| LOP_HOBT_DELTA | LCX_NULL | NULL | 666496 | 10414 |
| LOP_IDENT_NEWVAL | LCX_NULL | NULL | 100239960 | 2505999 |
| LOP_INSERT_ROWS | LCX_CLUSTERED | dbo.#6DCC4D03.PK__#6DCC4D0__3213E83F6FB49575 | 23544 | 218 |
| LOP_INSERT_ROWS | LCX_HEAP | dbo.#719CDDE7 | 72 | 1 |
| LOP_INSERT_ROWS | LCX_INDEX_INTERIOR | dbo.#6DCC4D03.PK__#6DCC4D0__3213E83F6FB49575 | 1042776 | 10302 |
| LOP_MODIFY_HEADER | LCX_BULK_OPERATION_PAGE | dbo.#6DCC4D03.PK__#6DCC4D0__3213E83F6FB49575 | 780216 | 10266 |
| LOP_MODIFY_HEADER | LCX_HEAP | dbo.#6DCC4D03.PK__#6DCC4D0__3213E83F6FB49575 | 1718472 | 20458 |
| LOP_MODIFY_HEADER | LCX_INDEX_INTERIOR | dbo.#6DCC4D03.PK__#6DCC4D0__3213E83F6FB49575 | 3192 | 38 |
| LOP_MODIFY_ROW | LCX_IAM | dbo.#6DCC4D03.PK__#6DCC4D0__3213E83F6FB49575 | 704 | 8 |
| LOP_MODIFY_ROW | LCX_PFS | dbo.#6DCC4D03.PK__#6DCC4D0__3213E83F6FB49575 | 114832 | 1307 |
| LOP_MODIFY_ROW | LCX_PFS | Unknown Alloc Unit | 231696 | 2633 |
| LOP_RANGE_INSERT | LCX_NULL | NULL | 48 | 1 |
| LOP_SET_BITS | LCX_GAM | dbo.#6DCC4D03.PK__#6DCC4D0__3213E83F6FB49575 | 77100 | 1285 |
| LOP_SET_BITS | LCX_GAM | Unknown Alloc Unit | 157920 | 2632 |
| LOP_SET_BITS | LCX_IAM | dbo.#6DCC4D03.PK__#6DCC4D0__3213E83F6FB49575 | 77100 | 1285 |
| LOP_SET_BITS | LCX_IAM | Unknown Alloc Unit | 157920 | 2632 |
| LOP_XACT_CKPT | LCX_NULL | NULL | 92 | 1 |
| Total | NULL | NULL | 108102960 | 2602218 |
+-------------------------+-------------------------+----------------------------------------------+---------------+---------+