অল্টার ইন্ডেক্স সমস্ত পুনর্নির্মাণ পৃথকভাবে প্রতিটি সূচি পুনঃনির্মাণের চেয়ে সহজ পুনরুদ্ধারের মডেল সহ আরও লেনদেনের লগ স্পেস ব্যবহার করে?


18

এসকিউএল সার্ভার ২০১২-তে একটি "অল্টার ইন্ডেক্স আল রিবিল্ড" অপারেশন ব্যর্থ হয়েছে কারণ লেনদেনের লগ স্থানের বাইরে চলে গেছে। সূচীগুলি কখনও পুনর্গঠিত বা পুনর্নির্মাণ করা যায়নি, সুতরাং প্রায় সমস্তগুলির উপর খণ্ডগুলি ৮০% এরও বেশি।

ডিবি সহজ পুনরুদ্ধার মডেল ব্যবহার করে। আমি ধরে নিয়েছি যে কমান্ডের "ALL" ফর্ম দ্বারা সম্পাদিত প্রতিটি সূচক অপারেশন অনুসরণ করে, পরবর্তী সূচি পুনর্নির্মাণের আগে লেনদেনের লগ ডেটা ফ্লাশ করা হবে। আসলে কীভাবে এটি কাজ করে, বা সূচি পুনর্নির্মাণগুলি লগ হয় যেন তারা কোনও লেনদেনের অংশ?

অন্য কথায়, আমি আলাদাভাবে প্রতিটি পুনর্নির্মাণের জন্য একটি স্ক্রিপ্ট লিখে লেনদেন লগের বৃদ্ধি কমাতে পারি? অন্য কোন বিষয় বিবেচনা করার আছে?


2
বিপরীতে স্পষ্ট ডেটা বাদ দিয়ে, আমি ধরে নেব যে একটি নির্দিষ্ট এসকিউএল কমান্ড ডিবি ইঞ্জিন দ্বারা একটি একক পরমাণু লেনদেন হিসাবে বিবেচিত হবে। এই ক্ষেত্রে, আপনি মোটামুটি সহজেই তত্ত্বটি পরীক্ষা করতে পারেন। আপনার বৃহত্তম সূচক নিন এবং কেবল এটি পুনর্নির্মাণের চেষ্টা করুন। যদি এটি সফল হয় তবে লগটি একাধিক পুনর্নির্মাণ থেকে তথ্য সংগ্রহ করছে তা ধরে নেওয়া যুক্তিযুক্ত। যদি এটি ব্যর্থ হয়, তবে আপনাকে লগের জন্য স্থান যুক্ত করতে হবে (যেহেতু আপনার কোনও সমস্যা হয়ে গেছে), অথবা আপনাকে পুনরায় নির্মাণের পরিবর্তে সেই সূচকটি পুনর্গঠিত করার চেষ্টা করতে হবে (যদি আপনি টি-এর জন্য স্থান বাড়াতে না পারেন) লগ)।
আরডিফোজ

হ্যাঁ, আমি এই চিন্তাটি আমার (রবার হাঁসের প্রভাব) টাইপ করার সাথে সাথেই ঘটেছিল তবে আমি ভেবেছিলাম নিশ্চিতকরণ পাওয়া সবচেয়ে ভাল হবে এবং অন্যদের জন্য যারা একইভাবে ভাবতে পারে তাদের জন্য এটি ছেড়ে দেওয়া ভাল। আমি এই পরিবেশটি নিয়ে পরীক্ষা করতে চাই না, তাই আমি সম্ভবত লগগুলিতে কোনওভাবেই স্থান যুক্ত করব।
গুগল

উত্তর:


16

আমি ধরে নিয়েছি যে কমান্ডের "ALL" ফর্ম দ্বারা সম্পাদিত প্রতিটি সূচক অপারেশন অনুসরণ করে, পরবর্তী সূচি পুনর্নির্মাণের আগে লেনদেনের লগ ডেটা ফ্লাশ করা হবে। আসলে কীভাবে এটি কাজ করে, বা সূচি পুনর্নির্মাণগুলি লগ হয় যেন তারা কোনও লেনদেনের অংশ?

1) লগ ফ্লাশিং: সিম্পল পুনরুদ্ধার মডেল প্রতিটি লেনদেনের পরে লগ পরিষ্কার করে না, তবে চেকপয়েন্টগুলিতে। ( আরও তথ্যের জন্য লিঙ্ক )

2 ক) সমস্ত পুনর্নির্মাণ: হ্যাঁ, পুনরায় বিল্ড করা সমস্ত একক লেনদেন হিসাবে কাজ করে। সূচকগুলির মধ্যে পুনর্নির্মাণগুলির নিজস্ব লেনদেন রয়েছে, তবে সামগ্রিক অপারেশন শেষ অবধি সম্পূর্ণরূপে প্রতিশ্রুতিবদ্ধ নয়। হ্যাঁ, আপনি পৃথক সূচি পুনর্নির্মাণের মাধ্যমে লগ ফাইলের বৃদ্ধি সীমিত করতে পারেন (এবং সম্ভবত CHECKPOINT কমান্ড জারি করেছেন)।

2 বি) প্রুফ! এখানে, একটি ডেমো স্ক্রিপ্ট আছে। (2016 দেব-এ নির্মিত) প্রথমে টেবিল এবং সূচী সহ একটি পরীক্ষা ডিবি সেট করুন:

USE master
GO

CREATE DATABASE Test_RebuildLog
GO

ALTER DATABASE Test_RebuildLog
SET RECOVERY SIMPLE
GO

USE Test_RebuildLog
GO

CREATE TABLE IndexTest
(ID int identity(1,1),
a char(1),
b char(1))

CREATE CLUSTERED INDEX CIX_IndexTest_ID ON IndexTest(ID)
CREATE INDEX IX_IndexTest_a ON IndexTest(a)
CREATE INDEX IX_IndexTest_b ON IndexTest(b)

INSERT IndexTest
(a,b)
VALUES ('a','b'),('z','y'),('s','r')

এখন আপনি সমস্ত পুনঃনির্মাণ এবং পৃথকভাবে পুনর্নির্মাণের মধ্যে লগ ক্রিয়াকলাপের তুলনা করতে পারেন

CHECKPOINT
GO
ALTER INDEX ALL ON IndexTest REBUILD

SELECT *
FROM sys.fn_dblog(NULL,NULL)
WHERE Operation = 'LOP_COMMIT_XACT'
OR Operation = 'LOP_BEGIN_XACT'
GO

CHECKPOINT
GO
ALTER INDEX CIX_IndexTest_ID ON IndexTest REBUILD
ALTER INDEX IX_IndexTest_a ON IndexTest REBUILD
ALTER INDEX IX_IndexTest_b ON IndexTest REBUILD

SELECT *
FROM sys.fn_dblog(NULL,NULL)
WHERE Operation = 'LOP_COMMIT_XACT'
OR Operation = 'LOP_BEGIN_XACT'
GO

নোট করুন যে প্রথম উন্মুক্ত লেনদেন (আমার জন্য লেনদেন আইডি 0000: 000002fa) সমস্ত পুনরায় বিল্ডিংয়ের শেষ না হওয়া পর্যন্ত প্রতিশ্রুতিবদ্ধ নয়, তবে সূচি অনুসারে সূচি পুনর্নির্মাণের জন্য তারা ক্রমাগত প্রতিশ্রুতিবদ্ধ।


বাহ, সত্যিই বিস্তারিত প্রতিক্রিয়া জন্য ধন্যবাদ! হুডের নীচে কী ঘটছে তা দেখার এক দুর্দান্ত উপায়, তাই বলার জন্য।
গুগল

সুন্দরভাবে ব্যাখ্যা করা।
রমাকান্ত দধিচি

4

যেমন দাঁড়িয়েছে, এটি একক লেনদেন।


6
ডিবিএ.এসই তে স্বাগতম! সাধারণভাবে, সর্বোত্তম উত্তরগুলি সাধারণ দাবি নয়, তবে ডকুমেন্টেশন বা নিবন্ধগুলি থেকে প্রাপ্ত তথ্যের দ্বারা বা (সম্ভবত আরও উত্তম) ব্যক্তিগত অভিজ্ঞতার বর্ণিত উত্তর প্রমাণ করে ব্যাক আপ করা হয়। আপনি কি এই উত্তরটি প্রসারিত করতে পারেন?
আরডিফোজ

2
@ আরডিএফোজz ফেয়ার মন্তব্য করেছেন, কিন্তু আপনি পেড্রোর প্রোফাইলটি দেখেছেন ? উত্স কোড অ্যাক্সেস সম্ভবত ব্যক্তিগত অভিজ্ঞতা বা ডকুমেন্টেশন চেয়ে বেশি অনুমোদনযোগ্য বিবেচনা করা যেতে পারে। :-)
অ্যারন বার্ট্র্যান্ড

3
অ্যারোনবার্ট্র্যান্ড - আমি স্বীকার করি, আমি করিনি। আমি অবশ্যই ভাবব যে এসকিউএল সার্ভার দলের অংশ হওয়াটা অবশ্যই যোগ্যতা অর্জন করবে। তবুও, এটি উত্তরে উল্লেখ করা উচিত। +1, যে কোনও ক্ষেত্রে।
আরডিফোজ

3

অফলাইন পুনর্নির্মাণের জন্য প্রশ্নটি তুচ্ছ । অবশ্যই একটি লেনদেন হয়। কল্পনা করুন যে অপারেশনটি যদি প্রতিটি সূচককে তার নিজস্ব লেনদেনে বিভক্ত করে তোলে তবে তা ঘটবে সময় লকগুলি ছেড়ে এবং তারপরে সেগুলি পুনরায় অর্জন করতে হবে। সমালোচনামূলক টেবিল এসসিএইচ-এম লক প্রকাশিত হওয়ার সাথে সাথে, সূচিগুলি বাদ দেওয়া যেতে পারে এবং নতুন সূচী তৈরি করা যেতে পারে, বিবৃতি কীভাবে এই ধরনের মামলা পরিচালনা করবে? টেবিলটি বাদ পড়তে পারে, এবং এমনকি দুটি লেনদেনের মধ্যে পুনরায় তৈরি হওয়াও উল্লেখ নেই ! কেস সহ যখন টেবিলটি বাদ পড়ে যায় এবং একই অবজেক্ট আইডি দিয়ে একটি আলাদা টেবিল তৈরি হয় (হ্যাঁ, এটি ঘটতে পারে) ...

যদি আপনি সূচক পুনর্নির্মাণ একটি অনলাইন পুনর্নির্মাণ হয় তবে কি হবে এই প্রশ্নটি যদি বাড়িয়ে তোলে? এটি কি একক লেনদেন নাকি অনেকের? উত্তরটি জটিল, কারণ এখানে বেশ কয়েকটি অভ্যন্তরীণ লেনদেন জড়িত রয়েছে । তবে, মূল বক্তব্যটি হ'ল একটি সামগ্রিক সংরক্ষণাগার লেনদেন যা পুরো অপারেশনকে ছড়িয়ে দেয় (ALTER স্টেটমেন্ট) এবং এটি লগ-ইন জায়গায় রাখে (কাটাতে পারে না), সুতরাং অপারেশনটি সেই অনুযায়ী ~ 1.6x ডেটার জন্য অনুমতি দেওয়ার পরিকল্পনা করা দরকার সম্পূর্ণ পুনরুদ্ধারের মোডের জন্য আকার বা BULK_LOGGED / সিম্পল মোডের জন্য 0.2x ডেটা আকার। আরও তথ্যের জন্য লিঙ্কযুক্ত কাগজ দেখুন।

আপনি তর্ক করতে পারেন যে অফলাইন বিল্ডিং কেন একই অভ্যন্তরীণ লেনদেনগুলি অনলাইন মোডের মতো করে এবং অপারেশনটিকে বিভক্ত করে না? আমি পৃথক সূচক ক্রিয়াকলাপগুলির (যেমন টেবিল 'স্কিমা স্থিতিশীলতা') এর মধ্যে টেবিলটি পরিবর্তন / বাদ দেওয়া সম্পর্কে উল্লেখ করেছি যে বিষয়গুলির এখনও প্রয়োজন হবে যে বিবৃতিটির পুরো সময়কালের জন্য টেবিলে একটি SCH-S ধারণ করে এমন একটি বিস্তৃত লেনদেন রয়েছে। যেহেতু এই লেনদেনটি অবশ্যই পুনরুদ্ধারের সময় এসসিএইচ-এসকে ধরে রাখতে হবে, এটি অবশ্যই লগড হওয়া উচিত এবং এর মতো কোনও বিগিন এক্সএসিটি লগ রেকর্ড থাকবে যা লগটিকে পিন করবে এবং বিবৃতিটির পুরো সময়কালের জন্য কাটা রোধ করবে। আমি জানি এই বিশেষ সমস্যাটি এসকিউএল ২০১-201-২০১ time সময় ফ্রেমে সম্বোধন করা হয়েছিল (এসকিউএল অ্যাজুরি লগ আকারের কারণে) তবে আমি নিশ্চিত নই কি অগ্রগতি হয়েছিল । দেখে মনে হচ্ছে এখন পূর্বরূপে রয়েছে:পুনঃসূচনাযোগ্য অনলাইন সূচক পুনর্নির্মাণটি এসকিউএল সার্ভার 2017 সিটিপি 2.0 এর সর্বজনীন পূর্বরূপে রয়েছে


0

হ্যাঁ, খুব বড় টেবিলের সাথে আমারও একই সমস্যা ছিল। আমি যখনই ALTER INDEX ALL জারি করি তখন লেনদেন লগ অনেক বেড়ে যায়, তবে পৃথকভাবে ALTER INDEX জারি করা হলে লগ স্পেসের ব্যবহার আরও কম হবে।


0

রেমাসের পূর্ববর্তী প্রতিক্রিয়াটি যে অনলাইনে সূচকে সম্পূর্ণ পুনরুদ্ধারের মোডের অধীনে সূচক আকারের 1.6x প্রয়োজন হয় তা সঠিক নয়। ফুলের অধীনে অনলাইনে একটি সূচি পুনর্নির্মাণের জন্য লেনদেনের লগিং স্পেসের অনুপাত অনেক বেশি হতে পারে এবং আমরা সূচকের আকারের বহুগুণ লক্ষ্য করেছি, বিশেষত যখন সূচকটি পুনর্নির্মাণ করা হচ্ছে যখন লেনদেনের লগিং সংকুচিত হয় না comp এটি একা এটি পরিষ্কার করে দেওয়া উচিত যে সম্পূর্ণরূপে অনলাইন পুনর্নির্মাণের সময় লেনদেনের সূচকের আকারের কমপক্ষে কয়েকগুণ বেশি হতে পারে। মাইক্রোসফ্ট দ্বারা সম্পূর্ণ নথিবদ্ধ নয় তবে প্রায়শই সারি প্রতি 60 বাইট অনুমান করা হয় এবং সম্পূর্ণ পুনরুদ্ধারের অধীনে পুনর্নির্মাণের জন্য কোনও অনলাইন সূচকের সময় লগিংয়ের আনুপাতিক আকার সূচকটি পুনর্নির্মাণের আকারের অনেক গুণ হতে পারে, বিশেষত যদি সূচক সংকুচিত হয়


-1

Rdfozz সঠিক যে আপনার বৃহত্তম সূচকটি বর্তমান স্টোরেজের ভিত্তিতে পুনর্নির্মাণ করা যায় কিনা তা সিদ্ধান্ত নেওয়ার সেরা উপায়। dm_exec_requestsসমস্ত সূচি পুনর্নির্মাণ করা হচ্ছে কিনা তা পরীক্ষা করার জন্য অপারেশনটি ঘটছে (বা এসকিউএল প্রোফাইলার) কেবল চালান । আমি পুনরুদ্ধার মডেলটি বাল্ক লগ-এ পরিবর্তন করার বিষয়টি বিবেচনা করব। এটি আমি যা করি এবং উইন্ডোতে এখনও লেনদেন লগ ব্যাকআপ থাকে। নীচের নিবন্ধটি দেখুন https://technet.microsoft.com/en-us/library/ms191484(v=sql.105).aspx


2
নোট করুন যে ওপি জানিয়েছে যে তাদের ডিবি ইতিমধ্যে সিমপ্লে পুনরুদ্ধারের মডেলটি ব্যবহার করছে; এটি লেনদেনে সম্পূর্ণ লেনদেনের জন্য যথেষ্ট দীর্ঘ রাখে। তারা বাল্ক-লগ ইন করা থাকলে কোনও উন্নতি হবে না।
আরডিফোজ

আপনার বেশ সঠিক। আমার ক্ষমা।
এডিটিজব
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.