স্থানটি পুনরায় দাবি করার জন্য আপনার কখন ডিবিসিসি ক্লিন্টেবল চালানো উচিত তা নির্ভর করার কোনও নির্ভরযোগ্য উপায় আছে?


11

ইদানীং, ফাইলগুলি 80% ফাইলের ব্যবহারের কাছাকাছি বাড়ানোর পরিবর্তে, আমি স্বাভাবিক ট্রিক্সের মাধ্যমে স্থানটি পুনরুদ্ধার করতে আরও সচল হয়েছি যেমন ডিফ্র্যাগমেন্টিং হিপস, ক্লাস্টার ইনডেক্স যুক্ত করা এবং ফেলে দেওয়া, সারি বা পৃষ্ঠা সংক্ষেপণ প্রয়োগ করা ইত্যাদি

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

আমি জানতে চাই যে, যদি কেউ বাইরে থেকে সক্রিয়ভাবে এই ধরণের সুযোগগুলি পর্যবেক্ষণ করে থাকে এবং যদি তাই হয় তবে আপনি বিশেষত কী খুঁজছেন?

আমার চিন্তাগুলি ছিল সারি সর্বাধিক এবং ন্যূনতম আকার সংগ্রহের সারণিতে কিছু লেখা, সারণীতে সারি সংখ্যা, বরাদ্দকৃত পৃষ্ঠাগুলির সংখ্যা এবং পৃষ্ঠাগুলির সংখ্যা, ফলাফলগুলি লগ করার জন্য কিছু প্রাথমিক গণিত করা যে "প্রত্যাশিত" কি হতে পারে তা বাইরে রয়েছে।


আমি বড় টেবিলগুলিতে ব্যাচ_সাইজ প্যারামিটারটি ব্যবহার করার পরামর্শ দিচ্ছি। এটি কমান্ডটি এক বিশাল লেনদেনের বিপরীতে লেনদেনের ধারাবাহিকতায় চালিত করবে।
ডাটাগোড

উত্তর:


11

এই সমস্যার জন্য আমি যে সমাধানটি ভাবব তা হ'ল সাপ্তাহিক এমন একটি কাজ চালানো যা কোনও ডাটাবেসে সমস্ত টেবিলের জন্য sp_spaceused চালিত হয় এবং এই তথ্যটি একটি সারণীতে সংরক্ষণ করে। প্রতিটি টেবিলের জন্য যদি আকারের পার্থক্য থাকে ... তবে বলুন .. ১০০% এর চেয়ে বড়, আমি ডিবিসিসি ক্লিনটেবল চালিত।

টেবিলের আকারগুলির মধ্য দিয়ে লুপ করতে আমার কোডটি দেখতে এমন দেখাচ্ছে:

if OBJECT_ID ('tempdb.dbo.#temp') is not null
    drop table #temp;

if OBJECT_ID ('dbo.BigTables') is not null
    drop table dbo.BigTables;
go

CREATE TABLE [dbo].[BigTables] (
    [table_name] [sysname] NOT NULL,
    [row_count] [int] NULL,
    [col_count] [int] NULL,
    [data_size] [varchar](50) NULL,
    [Date] [datetime] NOT NULL,
    [DBName] [nvarchar](128) NULL
);
GO

CREATE TABLE #temp (
    table_name sysname ,
    row_count int,
    reserved_size varchar(50),
    data_size varchar(50),
    index_size varchar(50),
    unused_size varchar(50)
);
go

INSERT     #temp
EXEC       sp_msforeachtable 'sp_spaceused ''?'''

insert into dbo.BigTables
SELECT     a.table_name,
           a.row_count,
           count(*) as col_count,
           a.data_size,
           getdate() as [Date],
    'MY DB' as DBName
FROM       #temp a
INNER JOIN information_schema.columns b
           ON a.table_name collate database_default
                = b.table_name collate database_default
GROUP BY   a.table_name, a.row_count, a.data_size
ORDER BY   CAST(Replace(a.data_size, ' KB', '') as integer) desc

DROP TABLE #temp;

Select * from dbo.BigTables;

এখন আপনার কেবল যুক্তিটি তৈরি করতে হবে যা সপ্তাহের মধ্যে আকারের পরিবর্তন কী হবে তা যাচাই করবে এবং এটি নির্ধারণ করবে।


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