উত্তর:
মেলিং তালিকাগুলির একটিতে আপনাকে ইন্টারেস্ট করা যেতে পারে , এটির উত্তর টম লেন (মূল দেব) দ্বারা দিয়েছেন:
[..] তবে আমার মতে এমন লোকেরা যারা এলআরইউ ক্যাচিং অ্যালগরিদমের চেয়ে চৌকস বলে মনে করে তারা সাধারণত ভুল হয়। টেবিলটি যদি ভারীভাবে ব্যবহৃত হয় তবে এটি স্মৃতিতে ঠিক থাকবে। যদি এটি একটি এলআরইউ অ্যালগরিদম অনুসারে মেমরির পর্যাপ্ত ভারীভাবে ব্যবহার না করা হয় তবে সম্ভবত মেমরির স্থানটি অন্য কোনও ক্ষেত্রে ব্যয় করা উচিত। [..]
আপনি কোনও এসও প্রশ্নেও ইন্টারেস্টেড হতে পারেন : https://stackoverflow.com/questions/486154/postgresql-temporary-tables এবং সম্ভবত আরও উপযুক্ত https://stackoverflow.com/questions/407006/need-to-load-the -whole-PostgreSQL-ডাটাবেসের-মধ্যে-RAM
পোস্টগ্রেস 9.4 অবশেষে সম্পর্কগুলি থেকে ওএস বা ডাটাবেস বাফার ক্যাশে (আপনার পছন্দ অনুসারে) প্রিলোড লোড করতে একটি এক্সটেনশন যুক্ত করেছে:
pg_prewarm
এটি আরও দ্রুত সম্পূর্ণ অপারেটিং পারফরম্যান্সে পৌঁছানোর অনুমতি দেয়।
আপনার ডাটাবেসে একবার চালান ( এখানে বিস্তারিত নির্দেশাবলী ):
CREATE EXTENSION pg_prewarm;
তারপরে কোনও প্রদত্ত সম্পর্কের প্রিলোড করা সহজ। প্রাথমিক উদাহরণ:
SELECT pg_prewarm('my_tbl');
my_tbl
অনুসন্ধানের পথে নামযুক্ত প্রথম সারণী সন্ধান করে এবং এটি পোস্টগ্রিস বাফার ক্যাশে লোড করে
বা:
SELECT pg_prewarm('my_schema.my_tbl', 'prefetch');
prefetch
অপারেটিং সিস্টেমটিতে অ্যাসিঙ্ক্রোনাস প্রিফেচ অনুরোধগুলি ইস্যু করে, যদি এটি সমর্থিত হয়, বা অন্যথায় ত্রুটি ছুড়ে দেয়।read
অনুরোধকৃত ব্লকের পরিসর পড়বে; বিপরীতেprefetch
, এটি সমস্ত প্ল্যাটফর্ম এবং বিল্ডগুলিতে সিঙ্ক্রোনাস এবং সমর্থিত তবে ধীর হতে পারে।buffer
ডেটাবেস বাফার ক্যাশে ব্লকগুলির অনুরোধিত পরিসীমা পড়ুন।
ডিফল্টটি হ'ল buffer
, যা সবচেয়ে বেশি প্রভাব ফেলে (উচ্চতর ব্যয়, সেরা প্রভাব)।
আরও বিশদের জন্য ম্যানুয়ালটি পড়ুন , উদ্ধৃতিগুলি সেখান থেকে।
Depesz এটি সম্পর্কেও ব্লগ করেছে।
সাধারণ ক্ষেত্রে যদি আপনার পর্যাপ্ত র্যাম থাকে আপনি সাধারণত র্যামে ব্যবহার করেন এমন জিনিসগুলি রাখার একটি ভাল কাজ করার জন্য আপনি সাধারণত ডাটাবেস পরিষেবাটিতে বিশ্বাস করতে পারেন। কিছু সিস্টেম আপনাকে ইঙ্গিত দেওয়ার অনুমতি দেয় যে টেবিলটি সর্বদা র্যামে রাখা উচিত (যা ক্ষুদ্রাকার টেবিলগুলির জন্য দরকারী যা প্রায়শই ব্যবহৃত হয় না তবে যখন তারা ব্যবহার করা হয় তবে তারা যত তাড়াতাড়ি সম্ভব সাড়া দেওয়া গুরুত্বপূর্ণ) তবে pgsql তে যদি এই টেবিলের ইঙ্গিত থাকে এগুলি ব্যবহার সম্পর্কে আপনার খুব সতর্ক হওয়া দরকার কারণ আপনি অন্য কোনও কিছু ক্যাশে করার জন্য উপলব্ধ মেমরির পরিমাণ হ্রাস করছেন যাতে আপনি সামগ্রিকভাবে আপনার অ্যাপ্লিকেশনটি ধীর করতে পারেন।
আপনি যদি প্রারম্ভকালে ডাটাবেসের পৃষ্ঠার ক্যাশে প্রাইম খুঁজছেন (উদাহরণস্বরূপ রিবুট বা অন্যান্য রক্ষণাবেক্ষণের পরে ডিবি ক্যাশে হওয়া সমস্ত কিছু ভুলে যায়) তবে নিম্নলিখিত স্ক্রিপ্ট লিখুন:
SELECT * FROM <table>
SELECT <primary key fields> FROM <table> ORDER BY <primary key fields>
SELECT <indexed fields> FROM <table> ORDER BY <indexed fields>
(প্রতিটি সূচক, বা কোর্সের জন্য সর্বশেষ পদক্ষেপটি পুনরাবৃত্তি করা হয়েছে এবং সঠিক ধারায় অর্ডার বর্ধমান ক্ষেত্রগুলি রাখতে সাবধান হন)
উপরেরটি চালানোর পরে প্রতিটি ডেটা এবং সূচী পাতাটি পড়া উচিত ছিল এবং এটি র্যাম পৃষ্ঠার ক্যাশে থাকবে (আপাতত কমপক্ষে)। আমাদের অ্যাপ্লিকেশন ডেটাবেসগুলির জন্য আমাদের মতো স্ক্রিপ্ট রয়েছে যা পুনরায় বুট করার পরে চালানো হয় যাতে সিস্টেমে লগ ইন করা প্রথম ব্যবহারকারীরা পরে ধীর সাড়া না দেয়। আপনি যে কোনো ধরনের স্ক্রিপ্ট হাতে লেখা, পরিবর্তে ডিবি সংজ্ঞা টেবিল স্ক্যান (যেমন বন্ধ আরও ভাল হয় sys.objects
/ sys.indexes
/ sys.columns
এমএস স্কুয়েল মধ্যে), তাহলে আপনি বেছে বেছে ইনডেক্স যে সবচেয়ে বেশি যে স্ক্যান বদলে ব্যবহার করা হয় স্ক্যান করতে পারে সবকিছু যা আর নিতে হবে।
SELECT * FROM schema.table
পোস্টগ্রাস 9.5-এ, আমি চেষ্টা করে দেখেছি এটি আমার 100GiB পোস্টগ্র্যাস এসকিউএল বাফার ক্যাশে পুরো 60GiB টেবিলটি লোড করেছে।
আমার অনুরূপ সমস্যা ছিল:
সার্ভার পরিষেবা পুনরায় চালু করার পরে এবং সমস্ত নগদ ডেটা ফেলে দেওয়া হয়েছে, প্রথম বারের মতো অনেক ক্যোয়ারী সত্যই ধীর গতির কারণ হিসাবে অনুসন্ধানের নির্দিষ্ট জটিলতার কারণ, যতক্ষণ না সমস্ত প্রয়োজনীয় সূচক এবং ডেটা নগদ না করা হয়। তার অর্থ, উদাহরণস্বরূপ ব্যবহারকারীদের অবশ্যই প্রতিটি "আইটেম" (1-3 সেকেন্ড এক্সিকিউশন সময়) এবং 50 মিলিয়ন সারি থেকে সম্পর্কিত ডেটা একবারে আঘাত করতে হবে, যাতে ব্যবহারকারীরা আর কোনও অযাচিত বিলম্ব অনুভব করবেন না। ব্যবহারকারীদের বিরক্তিকর হ্যাংগুলি अनुभव করতে প্রথম 3 ঘন্টা সময় লাগে, যতক্ষণ না বেশিরভাগ ব্যবহৃত ডেটা নগদ করা হয় এবং প্রোগ্রামগুলি উত্পাদন কর্মক্ষমতা সহ শীর্ষস্থানটি নষ্ট করে চলেছে, তারপরেও শেষ হয়, প্রথমবার অ্যাক্সেস করা ডেটা হিট করার সময় 2 দিন কয়েক হঠাৎ সংক্ষিপ্ত বিলম্ব হয় ... , পরিসংখ্যান ডেটা ইত্যাদির জন্য
এটি সমাধানের জন্য, একটি ছোট অজগর স্ক্রিপ্ট লিখেছেন যা বৃহত সূচকগুলির সাথে সবচেয়ে ভারী ব্যবহৃত টেবিলগুলিতে নির্বাচন সম্পাদন করে। এটি চালাতে 15 মিনিট সময় নিয়েছে, এবং কোনও কার্য সম্পাদনে বিলম্ব হচ্ছে না।
হুঁ, কপি কমান্ড সাহায্য করতে পারে। কেবল স্টপআউট করার জন্য কপি চালান এবং এটি থেকে পড়ুন। Pg_dump ব্যবহার করে এটি করা সম্ভব:
pg_dump -U <user> -t <table> <database> > /dev/null
অন্য উপায় হ'ল সমস্ত টেবিল ফাইল সন্ধান এবং চালানো cat <files> > /dev/null
।
টেবিল ফাইলের নাম কীভাবে পাবেন সে সম্পর্কে এখানে উদাহরণ দেওয়া হল:
# SELECT oid, datname FROM pg_database ;
oid | datname
-------+-----------
<...>
16384 | test
-- out of database is 16384
# SELECT oid, relname FROM pg_class WHERE relname like 'fn%';
oid | relname
-------+---------
24576 | fn
(1 row)
-- oid of our table is 24576
সুতরাং, টেবিলের ফাইলগুলি গুলি / পাথ / থেকে / পিএসএসকিএল / ডেটা / বেস / 16384/24576 *
আপনি স্থানান্তরিত সূচীগুলি এবং টোস্ট টেবিলগুলিও পড়তে চান, একইভাবে তাদের ওয়েড পান।
বিটিডাব্লু, আপনার এটি কেন দরকার? আমি বিশ্বাস করি পোস্টগ্রেকএল এবং ওএস হটেস্ট ডেটা ক্যাশে করতে এবং ভাল বজায় রাখতে যথেষ্ট স্মার্ট। ক্যাশে দক্ষতা।
আমি কিউসফট থেকে র্যামড্রাইভ ব্যবহার করি , যা উইন্ডোজের জন্য দ্রুততম র্যামডিস্ক হিসাবে বেঞ্চমার্কযুক্ত ছিল । আমি স্রেফ ব্যবহার করেছি
initdb -D e:\data
যেখানে e: the হ'ল রামডিস্কের স্থান।