পুনর্নির্মাণ সূচকগুলি, ডিবি এখন 10x আকারের


13

আমার কাছে একটি এসকিউএল সার্ভার ডাটাবেস রয়েছে (২০০৮ আর 2 এসপি 1) যা প্রায় 15 টি জিগ ছিল। দেখা যাচ্ছে যে রক্ষণাবেক্ষণ কিছুক্ষণের মধ্যে চলছিল না, তাই আমি সমস্ত সূচি পুনর্নির্মাণের জন্য একটি রক্ষণাবেক্ষণ পরিকল্পনা তৈরি করেছি, সেগুলি খুব খণ্ডিত ছিল।

কাজ শেষ হয়েছে এবং খণ্ডটি শেষ হয়ে গেছে, তবে এখন ডাটাবেসটি 120 টি জিগেরও বেশি! আমি বুঝতে পারি যে এটি সমস্ত পুনর্নির্মাণের জন্য অতিরিক্ত স্থান ব্যবহার করেছে, তবে এখন যে কাজটি হয়েছে তা আমি ভাবব যে সমস্ত স্থানটি মুক্ত স্থান হবে তবে মুক্ত স্থানটি কেবল 3 জিগ হিসাবে দেখায়, তাই 117 জিগ ব্যবহার করা হচ্ছে তবুও সূচি পুনর্নির্মাণ কাজ শেষ হয়েছে।

আমি খুব বিভ্রান্ত হয়েছি এবং কিছু গাইডেন্স ব্যবহার করতে পারি, আমার কাছে ডিবিটি যুক্তিসঙ্গত আকারে ফিরে পাওয়া যায়, এর জন্য আমাদের ডিস্কের স্থান নেই space

আগাম ধন্যবাদ!

পোস্ট করা উভয় প্রশ্নের ফলাফল এখানে:

লগ_আরউস_উইট_ডেস্ক কিছুই নয়

name    TotalSpaceInMB  UsedSpaceInMB   FreeSpaceInMB
LIVE_Data   152             123             28
LIVE_Log    18939           89              18849
LIVE_1_Data 114977          111289          3688

3 য় ফাইলটি একটি .ndf ফাইল, এটি কেবলমাত্র অব্যবহৃত স্থানে 3688 দেখায়, তবে প্রায় 15 জিগ ডেটার জন্য 111289 ব্যবহৃত হয়।

উত্তর:


15

এরই মধ্যে আমি ঠিক এটি আবিষ্কার করেছি, মোট মস্তিষ্কের বর্প। আমি পুনর্নির্মাণের কাজের ক্ষেত্রে 90 এর ফিল্ট ফ্যাক্টর বলে মনে করেছিলাম, তবে এটি "মুক্ত স্থান শতাংশে পরিবর্তন" হিসাবে কথিত তাই সেখানে 90 এর মান ব্যবহার করে, আমি আসলে 10 এর ফিল্ট ফ্যাক্টরটি ব্যবহার করছিলাম !! DOH এর। এটি 10x হিসাবে বড় হিসাবে অবাক হওয়ার কিছু নেই। আমি সংশোধন করে সঠিক ফিল ফ্যাক্টর দিয়ে পুনর্নির্মাণ করতে যাচ্ছি। যদিও ইনপুটটির জন্য প্রত্যেককে ধন্যবাদ।


1
এই উইজার্ডটি মাত্র ভয়াবহ।
usr ডিরেক্টরির

আমি জানি, আমি যেখানে আপনি FILL_FACTOR নির্দিষ্ট করে এবং%% না সুনির্দিষ্ট করতে চান সেখানে কমান্ড লাইন ব্যবহার করতে আমি এতটাই অভ্যস্ত যে, যদি এটি সামঞ্জস্যপূর্ণ হয়।

রিইন্ডেক্স না করে সঙ্কুচিত হবেন না, এটি কেবল সময়ের অপচয়! আরও তথ্যের জন্য আমার উত্তর দেখুন।
জেএনকে

1
জেএনকে আমি জানি আপনি কী বোঝাতে চেয়েছেন তা পুনর্নির্মাণের পরে সঙ্কুচিত হবে না কারণ এটি আবার সবকিছু খণ্ডিত করবে। যাইহোক, এই নির্দিষ্ট পরিস্থিতিতে যেখানে দুর্ঘটনাক্রমে জেফ প্রতিটি পৃষ্ঠায় 90% মুক্ত স্থান যুক্ত করেছিলেন, সেখানে স্থানটি পুনরায় দাবি করার জন্য আমি আর কোনও উপায় দেখতে পাচ্ছি না: ফিলিপ্যাক্টর 90 দিয়ে পুনর্নির্মাণ করুন, ফাইল সঙ্কুচিত করুন, তবে আপনাকে অন্য পুনর্নির্মাণ করতে হবে ফিলফ্যাক্টর দিয়ে আবার 90%। অথবা জায়গা ফিরে দাবি করার অন্য কোনও উপায় থাকবে। (ভাল হতে পারে একটি নতুন ফাইলগ্রুপ এবং তারপরে নতুন ফাইলগ্রুপের সাথে ড্রপ দিয়ে পুনর্নির্মাণ করুন তবে এটি সবার পক্ষে কার্যকর নয়)
এডওয়ার্ড ডর্টল্যান্ড

2

পুনর্নির্মাণ সূচকগুলি ডিবিতে অতিরিক্ত স্ল্যাক স্থান তৈরি করে। এটি পুনর্নির্মাণ প্রক্রিয়াটির একটি প্রাকৃতিক উপ-পণ্য - সার্ভারটি বর্তমান সংস্করণের পাশাপাশি সূচকটির একটি নতুন, আশাবাদী মাপের ভার্সন তৈরি করছে, তারপরে সম্পূর্ণ হওয়ার পরে বর্তমান সংস্করণটি হ্রাস করবে।

পুনর্নির্মাণের পরে সঙ্কুচিত হওয়া অর্থহীন!

আপনি কেবল সূচকটি আবার খণ্ডন করবেন! সঙ্কুচিত হওয়া ডিবি-র মধ্যে ডেটা পুনরায় প্রকাশ করে স্ল্যাক স্পেস সরিয়ে দেয়।

এখানে পল রান্ডাল এর একটি চমৎকার নিবন্ধ রয়েছে, যিনি মাইক্রোসফ্টে কাজ করার সময় DBCCসংকুচিত সহ কোডটির দায়িত্বে ছিলেন , কেন আপনাকে সঙ্কুচিত করা উচিত নয়।


0

আপনার পুনর্নির্মাণ বিকল্পটি ব্যবহার করা উচিত ছিল SORT_IN_TEMPDB=ON

আপনার ক্ষেত্রে প্রকৃত ডেটা ফাইল (গুলি), যেখানে প্রশ্নে থাকা টেবিলগুলি অবস্থিত, সূচিগুলি বাছাইয়ের জন্য ব্যবহার করা হয়েছে। 120 গিগাবাইটের বেশিরভাগ স্থান এখনও অব্যবহৃত এবং প্রয়োজনে পৃষ্ঠা ডেটা দিয়ে পূর্ণ হবে।

আপনি এই ক্যোয়ারির সাহায্যে ব্যবহৃত / ফ্রি স্পেস স্থিতি দেখতে পাবেন ( এখান থেকে নেওয়া ):

use [YourDatabaseNameHere]
go

select
    name,
    cast((size/128.0) as int) as TotalSpaceInMB,
    cast((cast(fileproperty(name, 'SpaceUsed') as int)/128.0) as int) as UsedSpaceInMB,
    cast((size/128.0 - cast(fileproperty(name, 'SpaceUsed') AS int)/128.0) as int) as FreeSpaceInMB
from
    sys.database_files

একটি নির্দিষ্ট ডাটাবেস ফাইল সঙ্কুচিত করার জন্য (ডেটা বা লগ), আপনি এখানে কিছু তথ্য দেখতে পারেন । এর আগে একটি সতর্কতা, অব্যবহৃত স্থান ছেড়ে দিতে 100+ জিবি ডাটাবেসগুলির জন্য (স্টোরেজ গতির উপরও নির্ভর করে) বেশ খানিকটা সময় নিচ্ছে, তাই এটি চালানো যাক।


হ্যাঁ এটি বিন্যাস করবে না, আমি এক মুহূর্তে এটিকে প্রশ্নটিতে যুক্ত করব।

@ জেফবেন: আপনি একটি উদ্ধৃতিতে এই প্রশ্নটি আপনার প্রশ্নের সাথে যুক্ত করতে পারেন? আমি সেখানে কি করতে পারি না।
মার্সেল এন।

1
কোনও সূচক পুনর্নির্মাণের সময় বাছাইয়ের জন্য আপনার সূচকের দ্বিগুণ স্থান প্রয়োজন হবে + 20%। সুতরাং আপনার ডিবিতে প্রতিটি সূচক পুনর্নির্মাণের জন্য আপনার ডিবিতে আপনার কেবলমাত্র বৃহত্তম সূচকের 120% প্রয়োজন। আপনি যদি SORT_IN_TEMPDB ব্যবহার করেন তবে আপনি কেবল 20% জিততে পারেন, আপনার ডেটা ফাইলে আপনার এখনও অ্যাডিশনাল 100% দরকার। আরও, টেম্পডিবিতে বাছাই করা আপনার আইও লোডকে তীব্রভাবে বাড়িয়ে তোলে, যেহেতু ডাটাফাইলে সূচকটি একবার লেখার পরিবর্তে, আপনি এখন এটি একবার টেম্পডিবিতে লিখে ডেটা ফাইলে লিখবেন। সুতরাং যে সর্বদা আদর্শ হয় না।
এডওয়ার্ড ডর্টল্যান্ড

-1

অন্য কোনও বিবরণ ছাড়াই আমার সন্দেহ হয় যে এর স্থানটি পুনরায় দাবি করার আগে আপনাকে লেনদেনের লগ ব্যাকআপ করতে হবে।

আপনি কি select name, log_reuse_wait_desc from sys.databasesবলে দেখুন । যদি লগ _ পুনঃব্যবস্থা_উইট_ডেস্ক কলামটি বলছে LOG_BACKUPতবে আপনি ট্রান লগের ব্যাকআপ না করা অবধি স্থানটি পুনরায় দাবি করতে পারবেন না।


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