পৃষ্ঠা সংক্ষেপণ ব্যবহার করার সময় সারি ওভারহেডটি কী?


10

আমি 650 সংখ্যাযুক্ত (19,4) কলাম সহ একটি সারণী তৈরি করেছি। যখন আমি পৃষ্ঠা সংক্ষেপণটি স্যুইচ করি, দৌড় দিয়ে

ALTER TABLE fct.MyTable REBUILD  WITH (DATA_COMPRESSION = PAGE);

আমি পাই

এমএসজি 1975, স্তর 16, রাজ্য 1
সূচক 'পিকে_ম্যাটেবল' সারির দৈর্ঘ্য '8060' বাইটের সর্বোচ্চ অনুমোদিত দৈর্ঘ্য ছাড়িয়েছে।

তবে 650 গুণ 9 বাইট কেবল 5850 বাইট, যা 8060 বাইটের বর্ণিত সীমা থেকে বেশ দূরে।

সার্ভারটি এসকিউএল সার্ভার 2016 এসপি 1 সিই 2 দিয়ে উইন্ডোজ 2012 r2 চালাচ্ছে

পৃষ্ঠা সংক্ষেপণ ব্যবহার করার সময় সারি ওভারহেডটি কী?

আমার অর্থটি বোঝানোর জন্য এখানে কিছু কোড দেওয়া হয়েছে:

/* test script to demo MSG 1975 */
DECLARE @sql NVARCHAR(max)='', @i INT =0
drop table if exists dbo.mytable;

SET @sql = 'Create table dbo.Mytable (MyTableID bigint not null 
  identity(1,1) primary key clustered, '

WHILE @i < 593 BEGIN
    SET @sql += ' Column' + LTRIM(@i) + ' numeric(19,4) null, '
    SET @i +=1
END

SET @sql += ' LastColumn int) '
--SET @sql += ' with (DATA_COMPRESSION = ROW) '
SET @sql += ' with (DATA_COMPRESSION = PAGE) '

SELECT @sql
EXEC sys.sp_executesql @sql

SELECT top 10000 * FROM dbo.MyTable MT

সারি সংক্ষেপণ এছাড়াও ব্যর্থ হয়, তবে একটি পৃথক সারিতে গণনা করা হয়।


আপনার প্রাথমিক কীটি কত বড়? যদি এটি একটি ফ্যাক্ট টেবিল হয় এবং আপনি কর্মক্ষমতা সংকুচিত করতে এবং উন্নত করতে চান তবে আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি কলাম স্টোর সূচীতে পড়তে পারেন, তারা বেশ প্রভাব ফেলতে পারে। পৃষ্ঠ সংক্ষেপণের ওভারহেড হ'ল ডিসপ্রেস করতে আরও সিপিইউ ব্যবহার।
স্টিজন ওয়াইনেন্টস

@StijnWynants; 8 টি বাইট বিগআইণ্টসের জন্য ব্যবহৃত হয়। এটি প্রকৃতপক্ষে একটি সত্য, তবে কলামস্টোরের সূচকে ওয়ারেন্ট দেওয়ার জন্য পর্যাপ্ত সারি নেই।
হেনরিক স্টাউন পুলসন

উত্তর:


13

যদি আপনি ক্লাস্টার করা পিকে বাধা ছাড়াই আপনার টেবিলটি তৈরি করার চেষ্টা করেন এবং আপনি কিছুটা আলাদা ত্রুটি পাবেন:

এমএসজি 1701, স্তর 16, রাজ্য 1, লাইন 1 সারণি তৈরি করতে বা পরিবর্তন করে 'মাইটেবিল' ব্যর্থ হয়েছে কারণ সর্বনিম্ন সারির আকার 8067 হবে, অভ্যন্তরীণ ওভারহেডের 1530 বাইট সহ। এটি 8060 বাইটের সর্বাধিক অনুমোদিত টেবিল সারির আকার অতিক্রম করে।

এই ত্রুটি বার্তায়, আপনি পৃষ্ঠা সংক্ষেপণের জন্য অভ্যন্তরীণ ওভারহেডের 1530 বাইট রয়েছে দেখতে পাবেন see

এখন, আপনি গণিত করতে পারেন:

  • bigintMyTableID এর জন্য 8 বাইট
  • intলাস্ট কলামের জন্য 4 বাইট
  • 593 numeric(19,4)কলামগুলির জন্য 9 বাইট (মোট 5337 বাইট)
  • সংক্ষেপে ওভারহেডের 1530 বাইট

সুতরাং, 8 + 4 + (593 * 9) + 1530 = 6879. এক সেকেন্ড অপেক্ষা করুন .... এটি এখনও 8060 এর নীচে that


পৃষ্ঠা সংক্ষেপণ অ্যালগরিদম আসলে বেশ কয়েকটি সংক্ষেপণ অ্যালগরিদমকে একসাথে স্ট্যাক করে। প্রথম পদক্ষেপটি হ'ল ROW সংক্ষেপণ প্রয়োগ করা। সারি সংক্ষেপণের ওভারহেড সেই ত্রুটি বার্তায় 1530 বাইট ওভারহেডের অন্তর্ভুক্ত নয়।

আমার ব্লগে এবং এখানে বিওএল-এ সারি সংক্ষেপণ কীভাবে কাজ করে সে সম্পর্কে আপনি আরও পড়তে পারেন । আপনি বিওএল নিবন্ধে নোট করবেন যে এটি numericস্টোরেজটিকে "এই স্টোরেজটি ভার্দিসিমাল স্টোরেজ ফর্ম্যাটের মতোই একই" হিসাবে বর্ণনা করে তবে ব্যাখ্যা দেয় না vardecimalএই পোস্টটিvardecimal আরও কিছুটা কভার করে - মূলত, এটি কলামে 2 বাইট ওভারহেড যুক্ত করে আসল দৈর্ঘ্য (যা varcharকরে তার মতো))

সারি সংক্ষেপণের জন্য 593 numericকলামগুলির প্রতিটিের জন্য অতিরিক্ত 2 বাইটের প্রয়োজন হবে , bigintএবং intপ্রতিটি ওভারহেডের 1 বাইট প্রয়োজন হবে।

সারি-কম্প্রেস স্টোরেজ প্রয়োজনীয়তা হবে:

  • bigintMyTableID এর জন্য 8 বাইট +1 বাইট ওভারহেড
  • intলাস্ট কলামের জন্য 4 বাইট +1 বাইট ওভারহেড
  • 593 numeric(19,4)টি কলামগুলির জন্য 9 বাইট + 2 বাইট ওভারহেড
  • ROW সংক্ষেপণের ওভারহেডের 1188 বাইট

8 + 4 + (593 * 9) = 5349 বাইট ডেটা

1 + 1 + (593 * 2) = 1188 বাইট সারি সংক্ষেপণ ওভারহেড

সারি-সংক্ষেপিত স্কিমা জন্য মোট 6537 বাইট


এখন যে আমাদের কাছে সারি-সংক্ষেপিত স্কিমাটির জন্য সারি আকার রয়েছে, আমরা আমাদের গণিতে পুনরায় ঘুরে দেখতে পারি। পৃষ্ঠা সংকুচিত সারির আকারটি হবে ডেটা আকার + সারি সংক্ষেপণ ওভারহেড + পৃষ্ঠা সংক্ষেপণ ওভারহেড:

  • bigintMyTableID এর জন্য 8 বাইট
  • intলাস্ট কলামের জন্য 4 বাইট
  • 593 numeric(19,4)কলামের প্রতিটি জন্য 9 বাইট
  • ROW সংক্ষেপণের ওভারহেডের 1188 বাইট
  • 1530 বাইট PAGE সংক্ষেপণের ওভারহেড
  5349 বাইট তথ্য 
+ 1188 বাইট সারি সংক্ষেপণ ওভারহেড 
+ 1530 বাইট পৃষ্ঠা সংক্ষেপণ ওভারহেড 

মোট 8067 বাইট


1
আমি আপনার উপসংহারটি পছন্দ করি: "বেশিরভাগ ক্ষেত্রে, আপনি দেখতে পাবেন যে সারি সংক্ষেপণ কিছু জায়গা বাঁচাতে সক্ষম – তবে সবসময় নয়" " 2718 বাইট ওভারহেড আমার প্রত্যাশার চেয়ে অনেক বেশি। এত বিস্তারিত উত্তর লেখার জন্য সময় দেওয়ার জন্য আপনাকে অনেক ধন্যবাদ।
হেনরিক স্টাউন পুলসন

1
@ হেনরিকসটাউনপলসন একটি অতিরিক্ত গুরুত্বপূর্ণ বিষয় মনে রাখবেন যে এসকিউএল সার্ভারকে এটি ধরে নেওয়া দরকার যে আপনার ডেটা সংকুচিত হতে না পারে। সুতরাং আপনার ডেটা ৮০60০ বাইটের চেয়ে কম সংকোচনের পরেও , এসকিউএল সার্ভারকে সঙ্কলনযোগ্য ডেটার জন্য তাত্ত্বিক সর্বোচ্চ সারি আকারের উপর ভিত্তি করে সারি আকারের গণনা করতে হবে।
এএমটাইউ

3 দিন পরে, আমি সারি সংক্ষেপণের জন্য প্রয়োজনীয় বাইট সংখ্যা দ্বারা এখনও অবাক; প্রতি কলামে 2 বাইট। পৃষ্ঠা সংক্ষেপণ তার উপরে প্রায় 3 বাইট যুক্ত করে। কিন্তু; আপনার সাহায্যের জন্য ধন্যবাদ. এটি সবচেয়ে দরকারী ছিল।
হেনরিক স্টাউন পুলসন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.