এসকিউএল সার্ভার সংকুচিত সূচিগুলি ডেটা সংক্ষেপণের উল্লেখ না করে পুনর্নির্মাণে সংকুচিত থাকে?


13

পৃষ্ঠার সংক্ষেপণ ( ALTER INDEX IX1 REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE)) ব্যবহার করে কেউ তাদের এসকিউএল সার্ভার সূচকগুলি পুনঃনির্মাণ করার পরে , কি পরবর্তী পুনর্নির্মাণগুলি (কোনও নির্দিষ্ট খণ্ডের প্রান্তের কিছু রক্ষণাবেক্ষণের স্ক্রিপ্টগুলির দ্বারা সম্পন্ন হয়েছে) আবার ডেটা সংক্ষেপণ নির্দিষ্ট করতে হবে? সূচিগুলি অন্যথায় কার্যকরভাবে সঙ্কুচিত হবে?

উত্তর:


22

সূচিগুলি পুনর্নির্মাণ / পুনর্গঠন করার সময় সংকুচিত থাকে।

টেবিল এবং সংক্ষেপিত সূচক তৈরি করুন

 CREATE TABLE DBO.TEST_INDX(id int, bla varchar(255));
 CREATE INDEX IX1 ON dbo.TEST_INDX(id)  WITH (DATA_COMPRESSION = PAGE);

সংক্ষেপণ পরীক্ষা করুন

 SELECT i.name, p.data_compression_desc 
 FROM sys.partitions P
 INNER JOIN sys.indexes I ON I.object_id = P.object_id AND I.index_id = P.index_id
 WHERE P.data_compression > 0 and I.name = 'IX1';

ফলাফল

name    data_compression_desc
IX1     PAGE

সূচকটি পুনর্নির্মাণ করুন

ALTER INDEX IX1 on  DBO.TEST_INDX rebuild 

সংক্ষেপণ পরীক্ষা করুন

 SELECT i.name, p.data_compression_desc 
 FROM sys.partitions P
 INNER JOIN sys.indexes I ON I.object_id = P.object_id AND I.index_id = P.index_id
 WHERE P.data_compression > 0 and I.name = 'IX1'

ফলাফল

name    data_compression_desc
IX1     PAGE

এগুলি অক্ষম করা এবং তারপরে পুনর্নির্মাণের আলাদা ফলাফল রয়েছে, যেহেতু অক্ষম করা সূচকটিকে সরিয়ে দেয়, সূচী সংজ্ঞাটি রেখে গিয়ে।

alter index IX1 on  DBO.TEST_INDX DISABLE ;
alter index IX1 on  DBO.TEST_INDX REBUILD ;

ফলাফল

name    data_compression_desc

সংক্ষেপ নষ্ট হয়ে গিয়েছিল, এসএসএমএসের মাধ্যমে সূচকগুলি তৈরি স্ক্রিপ্টটি মানিয়ে না নিয়ে ছাড়ার সময় এবং সূচি তৈরি করার সময় সংক্ষেপণ সংজ্ঞাও নষ্ট হয়ে যায়।

কেন?

কারণ সূচি তৈরির বিবৃতি স্ক্রিপ্ট করার সময় ডেটা-সংক্ষেপণ বিকল্পটি ধরে রাখা হয় না।

তবে, যদি আমরা সূচকটি অক্ষম করি, সংক্ষেপণের সাথে পুনর্নির্মাণ এবং তারপরে আবার পুনর্নির্মাণ:

alter index IX1 on  DBO.TEST_INDX DISABLE ;
alter index IX1 on  DBO.TEST_INDX REBUILD  WITH (DATA_COMPRESSION = PAGE);
alter index IX1 on  DBO.TEST_INDX REBUILD;

ফলাফল

name    data_compression_desc
IX1 PAGE

ওলা হ্যালেঞ্জ্রেনের রক্ষণাবেক্ষণ সমাধান সহ পুনর্নির্মাণের পরীক্ষা করা

পরামিতিগুলি পরীক্ষার উদ্দেশ্যে পরিবর্তিত হয়।

MinNumberOfPages প্যারামিটারের জন্য এটির প্রয়োজন হিসাবে একটি পৃষ্ঠায় পেতে কিছু ডেটা যুক্ত করুন।

INSERT INTO dbo.TEST_INDX(id,bla)
VALUES(5,'test');
go 10 

বিবৃতিটি মুদ্রণের জন্য সূচকটি অনুকূলিত করে নিন proc

EXECUTE dbo.IndexOptimize
@Databases = 'TestDB',
@FragmentationLow = 'INDEX_REBUILD_ONLINE',
@FragmentationMedium = 'INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE',
@FragmentationHigh = 'INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE',
@FragmentationLevel1 = 5,
@FragmentationLevel2 = 30,
@Indexes = 'TestDB.DBO.TEST_INDX',
@Execute = 'N',
@MinNumberOfPages = 1;

ফলাফল:

Command: ALTER INDEX [IX1] ON [TestDB].[dbo].[TEST_INDX] REBUILD WITH (SORT_IN_TEMPDB = OFF, ONLINE = ON, RESUMABLE = OFF)

Comment: ObjectType: Table, IndexType: NonClustered, ImageTex
t: No, NewLOB: No, FileStream: No, ColumnStore: No, AllowPageLocks: Yes, PageCount: 1, Fragmentation: 0
Outcome: Not Executed
Duration: 00:00:00
Date and time: 2019-01-09 14:48:12

উত্পন্ন কমান্ড কার্যকর করা হচ্ছে

ALTER INDEX [IX1] ON [TestDB].[dbo].[TEST_INDX] REBUILD WITH (SORT_IN_TEMPDB = OFF, ONLINE = ON, RESUMABLE = OFF)

সংকোচন ধরে রাখা হয়

name    data_compression_desc
IX1 PAGE

রক্ষণাবেক্ষণ পরিকল্পনার সাথে একটি পুনর্নির্মাণের পরীক্ষা করা (আমি ওলার সমাধানের জন্য দৃ strongly়ভাবে তর্ক করব)

সূচকগুলি পুনর্নির্মাণ করুন

এখানে চিত্র বর্ণনা লিখুন

পরীক্ষার টেবিলটি বেছে নিন

এখানে চিত্র বর্ণনা লিখুন

কিছু পরীক্ষার খণ্ডন স্তর যুক্ত করুন।

এখানে চিত্র বর্ণনা লিখুন

বিভাজনটি পেতে কিছু মান সন্নিবেশ করান

INSERT INTO dbo.TEST_INDX(id)
SELECT id from TEST_INDX
go 4

খণ্ডের শতাংশ পরীক্ষা করুন

SELECT 
I.[name] AS  INDX ,
IPS.avg_fragmentation_in_percent,
IPS.page_count
FROM sys.dm_db_index_physical_stats (DB_ID(), object_id('[dbo].[TEST_INDX]'), NULL, NULL, NULL) AS IPS
INNER JOIN sys.indexes AS I ON I.[object_id] = IPS.[object_id]
AND IPS.index_id = I.index_id
WHERE IPS.database_id = DB_ID()
and I.name = 'IX1'

ফলাফল

INDX    avg_fragmentation_in_percent    page_count
IX1 66,6666666666667    3

পরিকল্পনা চালান

এখানে চিত্র বর্ণনা লিখুন

এখানে আকর্ষণীয় অংশটি, পরিকল্পনার প্রতিবেদনের দিকে তাকানোর পরে, DATA_COMPRESSION = PAGEবিকল্পটি উত্পন্ন REBUILDকমান্ডের সাথে যুক্ত করা হয় !

Command:USE [TestDB]
GO
ALTER INDEX [IX1] ON [dbo].[TEST_INDX] REBUILD PARTITION = ALL WITH (PAD_INDEX = ON, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, RESUMABLE = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80, DATA_COMPRESSION = PAGE)

ফ্র্যাগমেন্টেশন:

INDX    avg_fragmentation_in_percent    page_count
IX1 0   2

সঙ্কোচন:

name    data_compression_desc
IX1 PAGE

আমি আপনার পোস্টটি জুড়ে এসেছি যখন আমি দেখতে পেলাম যে আমি 3 টি ডাটাবেসগুলি সংক্ষিপ্ত করেছিলাম সেগুলি সমস্ত তাদের সংকোচনে নষ্ট হয়ে গেছে এবং আমাকে এটি পুনরায় প্রয়োগ করতে হয়েছিল। সেই কাজের অংশ হিসাবে, আমি আপনার ফলাফলগুলি পরীক্ষা করেছি এবং নিশ্চিত করেছিলাম তবে কীভাবে ঘটেছিল তার কোনও ধারণা নেই। কেবলমাত্র অন্য সম্ভাবনা যা আমি এসেছি তা হ'ল, যদি সূচিগুলি অক্ষম থাকে তবে পুনর্নির্মাণের সময় তারা সংকোচন হারাবে। এটি আমাদের ইটিএল টিম হিসাবে দেখা যায় না। আমি এই প্রশ্নটি এসকিউএল সার্ভারসেন্টালালেও প্রকাশ করেছি: sqlservercentral.com/forums/2017336/ ডেটাবেসস - লস্ট- সংক্ষেপণ কীভাবে ঘটেছিল তার জন্য একটি ক্ষতির মধ্যে।
মার্ভেল

হাই @ মারভেল, এমন কি অন্য কিছু প্রক্রিয়া ডাটাবেসগুলিতে সূচি পুনরায় তৈরি করা যেতে পারে? উদাহরণস্বরূপ কিছু অ্যাপ্লিকেশন 'আপগ্রেড' করে যেখানে তারা ফেলে এবং অসংখ্য সূচক তৈরি করে। তবে আমি মনে করি না যে কেউ আরও বিশদ ছাড়াই একটি পরিষ্কার-ব্যাখ্যা দিতে সক্ষম হবেন। পরের বার যখন এটি ঘটে তখন আপনি সূচি তৈরির তারিখটি খুঁজে পেতে পারেন এবং সেগুলি পুনরায় তৈরি করেছেন কিনা তা খুঁজে পেতে পারেন (উদাহরণস্বরূপ এই লিঙ্কটিতে ক্যোয়ারী সহ: স্ট্যাকওভারফ্লো / সেকশনস / 7579932/… । অন্যথায় আপনি সর্বদা একটি প্রশ্ন হিসাবে জিজ্ঞাসা করতে পারেন, তবে আমি করি মনে করুন যে আপনার আরও তথ্য সরবরাহ করতে হবে
রেন্ডি ভার্টনজেন

1
ধন্যবাদ, রেন্ডি! আমি ডাটাবেসে SCHEMA_OBJECT_CHANGE_GROUP অডিটিং সেট আপ করেছি তবে এটি অবশ্যই লগগুলিতে দ্রুত পার্স করতে সহায়তা করবে। আমি ইতিমধ্যে একজন অপরাধীর সন্ধান পেয়েছি - ডাটাবেসের মালিক, যিনি সংক্ষেপণের অনুরোধ করেছিলেন তিনি ক্রমাগত টেবিল এবং সূচি পরিবর্তন করে চলেছেন। তিনি বুঝতে পারেন নি যে তিনি যখন নতুন টেবিল তৈরি করবেন এবং পুরানো ডেটা সরিয়ে নেবেন এবং নতুন সূচী তৈরি করবেন তখন সংকোচনের হাতছাড়া হবে। :( আমি তাকে তার সারণী ও সূচী তৈরির সঠিক পদ্ধতি দিয়েছি I তবে আমি মনে করি না যে তিনিই একমাত্র অপরাধী। আমি ভাবতে পারি না যে তিনি ই
মার্ভেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.