কোন প্রশ্নের সময় ডিস্ক থেকে কী পুনরুদ্ধার করা হয়?


14

মোটামুটি সহজ প্রশ্ন, সম্ভবত কোথাও উত্তর দেওয়া হয়েছে তবে আমি গুগলের জন্য সঠিক অনুসন্ধানের প্রশ্নটি গঠন করতে পারি না ...

Table সারণীর সাবসেটটি অনুসন্ধান করার সময় কোনও নির্দিষ্ট টেবিলের কলামগুলির সংখ্যা কি কোনও ক্যোয়ারির কার্য সম্পাদনকে প্রভাবিত করে?

উদাহরণস্বরূপ, যদি টেবিল ফু-এ 20 টি কলাম থাকে তবে আমার কোয়েরিটি those কলামগুলির মধ্যে কেবল 5 টি নির্বাচন করে, 20 টি (বনাম, বলুন, 10) কলামগুলি কোয়েরি কার্যকারিতাকে প্রভাবিত করে? সরলতার জন্য ধরে নিন যে যেখানে যেখানে ক্লউজের যে কোনও কিছু সেই 5 টি কলামে অন্তর্ভুক্ত রয়েছে।

অপারেটিং সিস্টেমের ডিস্ক ক্যাশে ছাড়াও পোস্টগ্র্রেসের বাফার ক্যাশে ব্যবহার সম্পর্কে আমি উদ্বিগ্ন। পোস্টগ্রিসের শারীরিক স্টোরেজ ডিজাইন সম্পর্কে আমার খুব বোঝা যায়। টেবিলগুলি বেশ কয়েকটি পৃষ্ঠায় সঞ্চিত হয় (প্রতি পৃষ্ঠায় 8k আকারে ডিফল্ট), তবে সেখান থেকে কীভাবে টিপলগুলি সাজানো হয়েছে তা আমি যথেষ্ট বুঝতে পারি না। পিজি কি কেবলমাত্র 5 টি কলামের সমন্বয়ে থাকা ডেটা থেকে ডিস্ক থেকে ডেটা আনতে যথেষ্ট স্মার্ট?


আপনি 50 বাইট আনার কথা বলছেন তবে বাকি 150 না not আপনার ডিস্কটি সম্ভবত এর চেয়ে বড় ইনক্রিমেন্টে পড়ে!
অ্যান্ডোমার

আপনি কোথা থেকে এই নম্বর পেয়েছেন?
Jmoney38

উত্তর:


15

সারিগুলির জন্য দৈহিক স্টোরেজ ডেটাবেস পৃষ্ঠা বিন্যাসে ডক্সে বর্ণিত । টোস্টের সম্পাদনা বিষয়বস্তুর উল্লেখযোগ্য ব্যতিক্রম (একটি পৃষ্ঠায় মানানসই আকারের আকারের) সাথে একই সারিটির কলামের সামগ্রী সমস্ত একই ডিস্ক পৃষ্ঠায় সঞ্চিত থাকে । বিষয়বস্তু প্রতিটি সারিতে ক্রমানুসারে উত্তোলন করা হয়, যেমন ব্যাখ্যা করা হয়েছে:

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

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

এখন টোস্টের ক্ষেত্রে: যখন কোনও পৃথক ক্ষেত্র ~ 2 কেবি ছাড়িয়ে যায়, ইঞ্জিন ক্ষেত্রের সামগ্রীগুলি একটি পৃথক শারীরিক সারণীতে সংরক্ষণ করে। পুরো সারিটি কোনও পৃষ্ঠায় ফিট না হলে এটি খেলায় আসে (ডিফল্টরূপে 8 কেবি): কিছু ক্ষেত্র টোস্ট স্টোরেজে স্থানান্তরিত হয়। ডক বলেছেন:

যদি এটি একটি পরিবর্তনশীল দৈর্ঘ্যের ক্ষেত্র হয় (অ্যাটলেন = -1) তবে এটি কিছুটা জটিল। সমস্ত পরিবর্তনশীল-দৈর্ঘ্যের ডেটা টাইপগুলি সাধারণ শিরোনামের কাঠামো স্ট্রাক্ট ভারেলিনা ভাগ করে, এতে সঞ্চিত মানের মোট দৈর্ঘ্য এবং কিছু পতাকা বিট অন্তর্ভুক্ত থাকে। পতাকাগুলির উপর নির্ভর করে ডেটা ইনলাইন বা একটি টোস্ট টেবিলে থাকতে পারে; এটি সংকুচিতও হতে পারে

টোস্টের সামগ্রীগুলি যখন সুস্পষ্টভাবে প্রয়োজন হয় না তখন সেগুলি পাওয়া যায় না, সুতরাং আনার মোট পৃষ্ঠাগুলির উপর তাদের প্রভাব ছোট (প্রতি কলামে কয়েকটি বাইট) is এটি @ ডেজোর উত্তরের ফলাফলগুলি ব্যাখ্যা করে।

লেখক হিসাবে, এর সমস্ত কলাম সহ প্রতিটি সারি প্রতিটি আপডেটে সম্পূর্ণরূপে পুনরায় লেখা হয়, যাই হোক না কেন কলামগুলি পরিবর্তিত হয়। সুতরাং আরও কলাম থাকা লেখার পক্ষে অবশ্যই আরও ব্যয়বহুল।


এটি একটি লাথি-গাধা উত্তর। ঠিক আমি যা খুঁজছি ধন্যবাদ.
Jmoney38

1
একটি ভাল রিসোর্স আমি সারি গঠন (pageinspect, এবং কিছু নমুনা ব্যবহার) শুভেচ্ছা পাওয়া এখানে
Jmoney38

10

ড্যানিয়েলের উত্তর পৃথক সারি পড়ার ব্যয়কে কেন্দ্র করে। এই প্রসঙ্গে: NOT NULLআপনার টেবিলের মধ্যে স্থির আকারের কলামগুলি প্রথমে স্থাপন করা কিছুটা সহায়তা করে। প্রাসঙ্গিক কলামগুলি প্রথমে রাখা (আপনি যেটির জন্য জিজ্ঞাসা করছেন) কিছুটা সহায়তা করে। আপনার কলামগুলির সাথে প্রান্তিককরণ টেট্রিস খেলে প্যাডিং হ্রাস করা (ডেটা প্রান্তিককরণের কারণে) কিছুটা সহায়তা করতে পারে। তবে সবচেয়ে গুরুত্বপূর্ণ প্রভাবটি এখনও উল্লেখ করা হয়নি, বিশেষত বড় টেবিলগুলির জন্য।

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

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

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

বড় ডেটাবেস সহ, এগুলি সমস্ত ক্যাশে স্মৃতিতে রাখার জন্য সাধারণত পর্যাপ্ত র্যাম নেই। বড় সারিগুলিতে আরও ক্যাশে, আরও বিতর্ক, কম ক্যাশে হিট, আরও ডিস্ক আই / ও রয়েছে occup এবং ডিস্ক পঠন সাধারণত অনেক বেশি ব্যয়বহুল। এসএসডি-তে কম তবে যথেষ্ট পার্থক্য রয়ে গেছে। এটি পৃষ্ঠা পড়ার বিষয়ে উপরের বিষয়টিকে যুক্ত করে।

এটা তোলে হতে পারে অথবা নাও করতে পারে কোন ব্যাপার যদি অপ্রাসঙ্গিক কলাম টোস্ট-ED হয়। প্রাসঙ্গিক কলামগুলি একই সাথে টাস্ট-এড হতে পারে, একই প্রভাবের অনেকটা ফিরিয়ে আনতে।


1

একটি ছোট পরীক্ষা:

CREATE TABLE test2 (
    id serial PRIMARY KEY,
    num integer,
    short_text varchar(32),
    longer_text varchar(1000),
    long_long_text text
);

INSERT INTO test2 (num, short_text, longer_text, long_long_text)
SELECT i, lpad('', 32, 'abcdefeghji'), lpad('', 1000, 'abcdefeghji'), lpad('', (random() * 10000)::integer, 'abcdefeghji')
FROM generate_series(1, 10000) a(i);

ANALYZE test2;

SELECT * FROM test2;
[...]
Time: 1091.331 ms

SELECT num FROM test2;
[...]
Time: 21.310 ms

ক্যোয়ারিকে প্রথম 250 সারিতে সীমাবদ্ধ করা ( WHERE num <= 250) ফলাফল যথাক্রমে 34.539 এমএস এবং 8.343 এমএসে। long_long_text18.432 এমএসে সীমিত সেট ফলাফলগুলি থেকে বাদে সমস্ত নির্বাচন করা । এটি দেখায় যে আপনার পদগুলিতে পিজি যথেষ্ট স্মার্ট।


ঠিক আছে, আমি অবশ্যই ইনপুট প্রশংসা করি। তবে, আমি দৃ with়তার সাথে বলতে পারি না যে এই পরীক্ষার দৃশ্যটি মূলত যা প্রস্তাব করেছিল তা প্রমাণ করে। কয়েকটি সমস্যা আছে। একটির জন্য, আপনি যখন প্রথম "নির্বাচন করুন * পরীক্ষা 2 থেকে" চালান, এটিতে আপনার ভাগ করা বাফার ক্যাশেটি পূরণ করা উচিত। এই ক্যোয়ারীটি ডিস্ক থেকে পুনরুদ্ধার করতে অনেক বেশি সময় নিয়েছিল। সুতরাং, ২ য় কোয়েরি তাত্ত্বিকভাবে আরও দ্রুততর হবে কারণ এটি এসবি ক্যাশে থেকে আনা হত। তবে আমি সম্মত হই যে এটি আপনার পরবর্তী পরীক্ষাগুলি / তুলনাগুলির ভিত্তিতে পিজি কেবল প্রয়োজনীয় সারিগুলি এনে 'প্রস্তাব দেয়' does
Jmoney38

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