কেন ফ্রি ডিস্কস্পেস (ডিবি 2) মুছে ফেলুন না?


18

ডিবি 2 এ আমার কাছে একটি টেবিল রয়েছে যাতে বড় বাইনারি ডেটা থাকে। এখন আমি পুরো টেবিলটি পরিষ্কার করেছি এবং রানস্ট্যাটগুলি, রিওর্জ, রানস্ট্যাটগুলি চালিয়েছি, তবে নেওয়া ডিস্কের জায়গার পরিমাণ পরিবর্তন হয় না। এখানে কী ভুল হতে পারে?

টেবিলটি তার নিজস্ব টেবিল স্পেসে থাকে যা আমি নীচে তৈরি করেছি:

CREATE BUFFERPOOL "MY_BP" SIZE 250 AUTOMATIC PAGESIZE 4096;
CREATE LARGE TABLESPACE MY_TBS IN DATABASE PARTITION GROUP IBMDEFAULTGROUP PAGESIZE 4096 MANAGED BY AUTOMATIC STORAGE EXTENTSIZE 64 PREFETCHSIZE 64 BUFFERPOOL MY_BP OVERHEAD 10.500000 TRANSFERRATE 0.140000 FILE SYSTEM CACHING;

আমি নীচে মুছে ফেলা / পুনঃব্যক্ত:

DELETE FROM MY_TBL
RUNSTATS ON TABLE MY_TBL WITH DISTRIBUTION AND DETAILED INDEXES ALL
REORG TABLE MY_TBL
RUNSTATS ON TABLE MY_TABLE WITH DISTRIBUTION AND DETAILED INDEXES ALL
ALTER TABLESPACE MY_TBS REDUCE

MY_TBL টেবিলটি তার আগে 2.5 ডিগ্রি গ্রহণ করেছিল এবং মোছা / পুনঃব্যবহারের পরে এটি কেবল 3 এমবি কম ব্যবহার করে।

এফডাব্লুআইডাব্লু: আমি ডিবি 2 / এনটি ভি 9.5.2 চালাচ্ছি।


এটি কি ডিবি 2 ভি 8-র সিস্টেমগুলির জন্য কাজ করে?
টনি

উত্তর:


22

আমি একটি অনুমান নিতে যাচ্ছি যে আপনি স্বয়ংক্রিয় স্টোরেজ ব্যবহার করছেন। (এমনটি নয় যে এটি অন্যথায় ঘটতে পারে ... স্বয়ংক্রিয় স্টোরেজ দিয়ে এটি হওয়া খুব সহজ))

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

নিম্নলিখিতটি করুন

db2 list tablespaces show detail

এটি আপনাকে প্রতিটি টেবিল স্পেস এবং এটি ডিস্কে কী ব্যবহার করছে তা দেখাবে। Used pagesডাটাবেসটি কত পৃষ্ঠা ডিস্ক ব্যবহার করছে। এর তুলনায় total pages(ডিস্কে মোট দাবি করা) এবং High water mark (pages)আপনি যদি আপনার প্রয়োজনের তুলনায় বেশি "দাবি" করছেন তবে আপনাকে প্রদর্শন করবে the (যেমন, স্বল্প ব্যবহৃত পৃষ্ঠাগুলি, খুব উচ্চ মোট পৃষ্ঠাগুলি এবং মোট পৃষ্ঠাগুলির নিকটে একটি উচ্চ জল চিহ্ন)।

এই অব্যবহৃত স্থান পরিত্রাণ পেতে এবং অপারেটিং সিস্টেম আপনাকে নিম্নলিখিত ইস্যু হবে এটা ফেরত (স্বয়ংক্রিয় স্টোরেজ অধীনে) করার জন্য: db2 alter tablespace <tablespace name> reduce max। উদাহরণ

db2 alter tablespace ts1 reduce max;

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

আপনি যদি স্বয়ংক্রিয় স্টোরেজ ছাড়াই ডিএমএস ব্যবহার করেন তবে আপনাকে কিছুটা আলাদা কমান্ডের সেট ব্যবহার করতে হবে:

db2 alter tablespace <tablespace name> lower high water mark;
db2 alter tablespace reduce (<containter name> or [all containers] integer K|M|G or integer PERCENT);

উদাহরণ

db2 alter tablespace ts1 lower high water mark;
db2 alter tablespace reduce (all containers 500 M);

আমরা যেখানে কাজ করি, আমরা এটি আমাদের রক্ষণাবেক্ষণের কিছু স্ক্রিপ্টগুলিতে রেখেছি যাতে আমরা ডিস্কের স্থান পুনরায় দাবি করতে নিশ্চিত করার জন্য পুনরায় বর্জন করার পরে আমরা এটি স্বয়ংক্রিয়ভাবে এটি চালিত করি। আমাদের ক্ষেত্রে আমরা DB2 LUW 9.7 এফপি 4 ব্যবহার করি, সুতরাং আপনার সংস্করণটির সঠিক তথ্যে অ্যাক্সেস রয়েছে কিনা তা নিশ্চিত করতে 9.5 এর জন্য তথ্য কেন্দ্রের দ্বিগুণ চেক করা আপনার ক্ষতি করে না।

সম্পাদনা: যদি আপনার টেবিল স্পেসগুলি কোনও ডাটাবেস থেকে DB2 9.7 এ আপগ্রেড করা হয়, সম্ভবত আপনার পুনরুদ্ধারযোগ্য সঞ্চয়স্থান বৈশিষ্ট্য সেট থাকবে না। আপনি ডিএমএস থেকে স্বয়ংক্রিয় স্টোরেজে আপগ্রেড করলেও এটি সত্য। যেভাবেই আপনি উচ্চ জলের চিহ্নটিকে কম করতে পারেন না এমনভাবে কামড়ান। আপনাকে টেবিল এবং ডেটা ফেলে দিতে হবে, টেবিল স্পেসগুলি ফেলে দিতে হবে। তারপরে স্বয়ংক্রিয় স্টোরেজ ব্যবহার করে টেবিলস্পেসটি পুনরায় তৈরি করুন এবং আপনার টেবিলগুলির জন্য ডেটা আমদানি করুন।


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

1
কেবলমাত্র একটি তাত্পর্যপূর্ণ মন্তব্য, ডিবি 2 9.5 তে, আপনি alter tablespace <tbsp> lower high watermarkবা alter tablespace <tbsp> reduce maxবাক্য গঠন ব্যবহার করতে পারবেন না - এগুলি ডিবি 2 9.7 অবধি চালু করা হয়নি।
ইয়ান বোজোরহোভদে

আমি আমার প্রাথমিক পোস্টে যেমন উল্লেখ করেছি, ইতিমধ্যে আমি বেশিরভাগ চেষ্টা করেছি এবং এটি কার্যকর হয়নি। এতক্ষণে আমি আমার নিজের সমাধানটি পেয়েছি: ডিস্কের জায়গাটি পুনরুদ্ধার করা যায়নি কারণ আমি লংলোবডিটিএটি বিকল্পটি নির্দিষ্ট করে নেই, আপনি যদি বিএলএব বা সিএলওবিএস থেকে ডিস্কের জায়গা দাবি করতে চান তবে এটি প্রয়োজনীয় বলে মনে হচ্ছে। এখানে আমার নিজের প্রশ্নের আমার উত্তর দেখুন। যাইহোক আপনি আপনার উত্তরে যে প্রয়াস দিয়েছেন তা আমি প্রশংসা করি, +1!
আলেকজান্ডার টোবিয়াস বকস্টলার

9

সারণীতে MY_TBLএকটি BLOBকলামে বড় বাইনারি ডেটা রয়েছে । REORGকমান্ডের ডকুমেন্টেশন বলে যে ডিবি 2 এই জাতীয় বস্তুগুলি পুনর্গঠন করা এড়িয়ে যায় কারণ এটি সময় সাপেক্ষ এবং ক্লাস্টারিংয়ের উন্নতি করে না। তবে LONGLOBDATAবিকল্পটি নির্দিষ্ট করা থাকলে ডিবি 2 এলওবি ডেটা পুনর্গঠন করতে বাধ্য হতে পারে । অব্যবহৃত স্থানটি ডিবি 2 দ্বারা পুনরায় ব্যবহার করা যেতে পারে, সুতরাং নতুন তথ্য সন্নিবেশ করানো হলে নতুন বরাদ্দ দেওয়ার আগে বিদ্যমান, অব্যবহৃত পৃষ্ঠাগুলি প্রথমে পূরণ করবে।

চলমান

REORG TABLE MY_TBL LONGLOBDATA

খালি টেবিলটি ব্যবহার করে এমন 2.5 গিগাবাইটের ডিস্ক স্পেসটি সফলভাবে পুনরুদ্ধার করে।

আমি এই বিকল্পটি সম্পর্কে জানতাম না এবং আমি প্রথমবার ডকুমেন্টেশন পড়ি তখন এটি পর্যবেক্ষণ করি।


ভাল যুক্তি. তবে, আমি সবেমাত্র একটি ডিবি 2 নাইটশো পর্বের "ব্লবের আক্রমণ" -এ শিখেছি যা থেকে আপনি লংলবোডাটা বিকল্পটি প্রায়শই চালাতে চান না কারণ এটি বেশি সময় নেয় এবং / অথবা পারফরম্যান্স সমস্যার কারণ হয়ে থাকে (আপনি যদি অনলাইনে আরআরও করার চেষ্টা করছেন) ।
ক্রিস অ্যালডরিচ

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