সারণির ক্ষেত্রটি সরিয়ে দেওয়ার পরে ডিস্কের স্থান দাবি করা


16

আমি স্ক্যুয়েল ২০০৮ আর 2 চালাচ্ছি এবং প্রায় 3 মাস আগে অবধি প্রায় 3 বছর ধরে ডিবি খুব ভাল এবং দ্রুত কাজ করে যাচ্ছিল আমরা খুব সক্রিয় এবং ব্যবহৃত টেবিলে এনটেক্সট ফিল্ড যুক্ত করেছি। এই টেবিলটির বিশাল বিস্তৃত আকারের কারণে আমরা এখন সার্ভার স্পেস থেকে বেরিয়ে শুরু করছি।

আমি এই সঙ্কুচিতটি পড়েছি, আমরা ডিবি এর সূচীটি শিথিল করতে চাই না কারণ এটি বছরের পর বছর ধরে দ্রুত কাজ করে যাচ্ছিল এবং আমরা খণ্ড খণ্ডিত ব্যয় করতে চাই না।

আমরা সেই ক্ষেত্রটি এবং এর সমস্ত মান মুছে ফেলার সিদ্ধান্ত নিয়েছি: ডিবি কর্মক্ষমতা ছাড়াই, সঙ্কুচিত না করে, এনটেক্সট ফিল্ড এবং তার সমস্ত মান এবং মুদ্রণ স্থান ছাড়ার কোনও উপায় আছে?

আমি আপনাকে গত 5 মাসের আকার প্রসারিত করতে ডিবি আকারের ক্যোয়ারী আউটপুট সংযুক্ত করছি।

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

উত্তর:


12

আমরা সেই ক্ষেত্রটি এবং এর সমস্ত মান মুছে ফেলার সিদ্ধান্ত নিয়েছি: ডিবি কর্মক্ষমতা ছাড়াই, সঙ্কুচিত না করে, এনটেক্সট ফিল্ড এবং তার সমস্ত মান এবং মুদ্রণ স্থান ছাড়ার কোনও উপায় আছে?

আমি ব্যবহার করার পরামর্শ দেব (বিওএল থেকে:)

DBCC CLEANTABLE
(
    { database_name | database_id | 0 }
    , { table_name | table_id | view_name | view_id }
    [ , batch_size ]
)
[ WITH NO_INFOMSGS ]

ভেরিয়েবল-দৈর্ঘ্যের কলামটি বাদ দেওয়ার পরে ডিবিসিসি ক্ল্যান্টেবল স্থান পুনরায় দাবি করে। ভেরিয়েবল-দৈর্ঘ্যের কলামটি নিম্নলিখিত তথ্যগুলির মধ্যে একটি হতে পারে: বর্ণচর, এনভারচার, ভারচার (সর্বাধিক), এনভারচার (সর্বাধিক), ভের্বাইনারি, ভার্বাইনারি (সর্বাধিক), পাঠ্য, নেক্সট, চিত্র, স্ক্যালো_ভ্যারেন্ট এবং এক্সএমএল। একটি নির্দিষ্ট দৈর্ঘ্যের কলামটি বাদ দেওয়ার পরে কমান্ডটি স্থান পুনরায় দাবি করে না।

!! সতর্কতা !! ( সাবধানে ব্যাচের আকারটি ব্যবহার করুন - যদি আপনার টেবিলটি বিশাল হয় তবে এই প্যারামিটারটি ব্যবহার করার পরামর্শ দেওয়া হবে) :

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

এই অপারেশনটি সম্পূর্ণরূপে লগড।

একটি সাধারণ DBCC CLEANTABLEরেপ্রোটি প্রমাণ করবে যে সঙ্কুচিত হওয়ার চেয়ে ভাল (এবং খণ্ডিত হওয়ার কোনও উদ্বেগ নেই :-)

-- clean up
drop table dbo.Test

-- create test table with ntext column that we will drop later
create table dbo.Test (
    col1 int
    ,col2 char(25)
    ,col3 ntext
    );

-- insert  1000 rows of test data
declare @cnt int;

set @cnt = 0;

while @cnt < 1000
begin
    select @cnt = @cnt + 1;

    insert dbo.Test (
        col1
        ,col2
        ,col3
        )
    values (
        @cnt
        ,'This is a test row # ' + CAST(@cnt as varchar(10)) + 'A'
        ,REPLICATE('KIN', ROUND(RAND() * @cnt, 0))
        );
end

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

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

--drop the ntext column
ALTER TABLE dbo.Test DROP COLUMN col3 ;

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

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

--reclaim the space from the table
-- Note that my table is only having 1000 records, so I have not used a batch size
-- YMMV .. so find a maintenance window and you an appropriate batch size 
-- TEST TEST and TEST before implementing in PROD.. so you know the outcome !!
DBCC CLEANTABLE('tempdb', 'dbo.Test') ;

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

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


আপনি ডিবিসিসি ক্লিন্টেবল কমান্ডটি কার্যকর করার পরে, জায়গাটি ফিরে পেতে টেবিলের একটি ক্ষেত্রে আপনার ক্লাস্টার ইনডেক্সটি পুনরায় বিল্ড করা উচিত। আপনার টেবিল পুনরায় বিল্ড ইন ইন্ডেক্স সূচক নাম পরিবর্তন করুন;
মিঃ টিএ

6

বেশিরভাগ অংশের জন্য আমি পল রান্ডাল এর স্টোরেজ ইঞ্জিন ব্লগ সিরিজের অভ্যন্তর উল্লেখ করছি ।

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

যেহেতু আপনি এনটিএসএক্স কলামটি বাদ দিচ্ছেন আপনাকে সঙ্কুচিত হওয়ার আগে আপনাকে ভূত সাফ করার প্রক্রিয়াটির জন্য ডেটা ফেলে দেওয়ার জন্য অপেক্ষা করতে হবে।

এখন ডাটাবেস ফাইলগুলিতে প্রচুর পরিমাণে ফাঁকা স্থান পাওয়া আপনার ক্ষতি করবে না, যদি আপনার ডিস্কের স্থান থাকে তবে ব্যাকআপ সংক্ষেপণ ফাইলগুলির মধ্যে ফাঁকা জায়গার যত্ন নেবে।

আপনি যদি ফাইলগুলি একেবারে আরও ছোট করতে চান তবে আপনি ডাটাবেসের সাহায্যে একটি নতুন ফাইলগোষ্ঠী তৈরি করতে পারেন এবং এটি ডিফল্ট তৈরি করতে পারেন এবং তারপরে সারণিগুলিকে নতুন ফাইলগ্রুপে স্থানান্তর করতে পারেন তবে এটি সময় নিতে পারে এবং ডাউনটাইমের কারণ হতে পারে। আমি এখানে বব পুস্টেরির দ্বারা ব্যাখ্যা করা কৌশলটি ভাল ফলাফল সহ ব্যবহার করেছি।


ভূত ক্লিনআপ প্রক্রিয়া স্থান হ্রাস করবে বা সঙ্কুচিত এছাড়াও প্রয়োজন হবে?
ব্যবহারকারী 1021182

আপনাকে সর্বদা সঙ্কুচিত হতে হবে, ক্লিনআপ প্রক্রিয়া কেবল বরাদ্দকৃত পৃষ্ঠাগুলি খালি করে তবে সেগুলি ডাটাবেস ফাইলগুলি থেকে সরিয়ে দেয় না
স্প্ররি

1
@ স্পুরি আমার উত্তরSince you are dropping the NTEXT column you will have to wait for the ghost cleanup process to drop the data before shrinking. দেখুন দয়া করে । আপনি স্থানটি প্রকাশ করতে ব্যবহার করতে পারেন । DBCC CLEANTABLE
কিন শাহ

4

অন্যান্য ডাটাবেস / ডিবি নন ফাইলের জন্য আপনার সেই জায়গার প্রয়োজনের কারণে বা এই ডাটাবেসটি ফাঁকা না থাকায় সমস্যা হচ্ছে বলে আপনি কি ডাটাবেস ফাইলগুলি সঙ্কুচিত করতে চান?

যদি এটি দ্বিতীয় হয় তবে আপনার মনে হয় এত বড় সমস্যা নাও থাকতে পারে। যদি আমি সংশোধন করি আপনার সমস্যাটি হ'ল নতুন ডেটার জন্য অতিরিক্ত স্থান অর্জনের জন্য যখন ডাটাবেসটি বাড়তে হয়। একবার আপনি কলামটি সরিয়ে ফেললে column কলামটির নেওয়া সমস্ত স্থান ফাঁকা হয়ে যাবে এবং ডাটাবেসে সারণিতে নতুন সারি যুক্ত হওয়ার জন্য তা মুক্ত করা হবে। এর অর্থ হল আপনার ডাটাবেসটি বাড়ার আগে এটি আরও দীর্ঘ হবে। মাঝামাঝি সময়ে আমি আপনার ডেটা ড্রাইভের জন্য কিছু অতিরিক্ত জায়গা পেতাম। বেশিরভাগ ডাটাবেস সময়ের সাথে সাথে বৃদ্ধি পায় এবং ড্রাইভের ফাঁকা জায়গার স্বাস্থ্যকর মার্জিন পাওয়া ভাল।


আমাদের ডিস্ক স্পেসে কেবল 10 জিবি বাকি রয়েছে এবং এটি কয়েক দিনের মধ্যেই শেষ হয়ে যাবে। আমরা সার্ভার থেকে যা সরিয়ে ফেলতে পারতাম এবং ক্লিনআপগুলি ব্যবহার করে উইন্ডোজ আপডেটগুলি বন্ধ করে দিয়েছিলাম এবং উইনক্সগুলি পরিষ্কার করেছি, এখন আমাদের অবশ্যই ডিবি ফাইলের আকার হ্রাস করতে হবে
ইউজার 1021182

আবার মনে রাখবেন যে একবার আপনি অতিরিক্ত কলাম মুছে ফেললে আপনার খালি নতুন জায়গা পূরণ করার পরে আপনার ডিবি বৃদ্ধি কিছু সময়ের জন্য বন্ধ হয়ে যাবে। আপনার ডিবি যদি এখনও এই পয়েন্টের পরেও বাড়তে থাকে তবে আপনার ডেটাবেসের জন্য আপনার অতিরিক্ত ডিস্কের জায়গার প্রয়োজন হবে। সম্ভবত আপনার সার্ভারে একটি নতুন ড্রাইভ যুক্ত করুন।
কেনেথ ফিশার

0

আমি আপত্তিজনক কলাম ছাড়াই একটি আয়না টেবিল তৈরি করব, এই টেবিলটিতে সমস্ত ডেটা অনুলিপি করব, আসলটি ড্রপ করব এবং তারপরে আয়না টেবিলটির নতুন নাম রাখব।



হ্যাঁ, সারণীতে প্রভাবিত যে কোনও
সূচিগুলিও বাদ পড়তে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.