এই পার্থক্যটি কেবল তখন প্রয়োগ হয় যখন বস্তুটি একটি বি + ট্রি হয়। 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 |
+--------+--------+---------+-------------------+
আমার তত্ত্বটি হ'ল স্থানীয় অস্থায়ী বি + গাছগুলিতে বাল্ক সন্নিবেশ করার সময় কিছু অপ্টিমাইজেশন উপলব্ধ রয়েছে যা কেবলমাত্র তখনই প্রয়োগ হয় যখন এর মধ্যে ইতিমধ্যে কোনও পৃষ্ঠা বরাদ্দ নেই।
আমি নিম্নলিখিত পর্যবেক্ষণ ভিত্তিতে এটি বেস।
যখন আপনার পরীক্ষার কোডের বিভিন্ন সংস্করণগুলি চালায় আমি শুধু সঙ্গে এই প্যাটার্ন দেখেছি @table_variables
এবং #temp
টেবিল। টেবিলগুলিতে স্থায়ী টেবিল tempdb
নয় ##
।
ধীর পারফরম্যান্স পেতে টেবিল থেকে প্রচুর পরিমাণে সারি পূর্বে যুক্ত এবং সরিয়ে ফেলা প্রয়োজন হয় না। কেবল একটি একক সারি যুক্ত করা এবং এটি সেখানে রেখে দেওয়া যথেষ্ট।
TRUNCATE
টেবিল থেকে সমস্ত পৃষ্ঠাগুলি deallocates। DELETE
সারণির শেষ পৃষ্ঠাটি হ্রাস করা হবে না।
ভিএস 2012 প্রোফাইলার ব্যবহার করে দেখা যায় যে দ্রুত ক্ষেত্রে এসকিউএল সার্ভার একটি ভিন্ন কোড পাথ ব্যবহার করে। ধীর ক্ষেত্রে for১ sqlmin.dll!RowsetBulk::InsertRow
% সময় ব্যয় করা হয়েছে vs১% সময়কে sqlmin.dll!RowsetNewSS::InsertRow
।
চলমান
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 মেগাবাইট থেকে নেমে) পরবর্তী টিপে জন্য যথেষ্ট লগ-ইন করার কিন্তু এই 2nd এবং পরবর্তী সময়টা একমাত্র একটি ছোটখাট উন্নতি ছিল @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 |
+-----------------------+----------+----------------------------------------------+---------------+---------+
পরবর্তী সন্নিবেশগুলি টিএফ 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 |
+-------------------------+-------------------------+----------------------------------------------+---------------+---------+