আমি কীভাবে পোস্টগ্রিজ এসকিউএল কোয়েরিটিকে বেঞ্চমার্ক করতে পারি?


34

পোস্টগ্র্রেএসকিউএল-এর জন্য আমি লিখেছি এমন একটি ব্যবহারকারী-সংজ্ঞায়িত ফাংশনযুক্ত একটি কোয়েরিটি আমি বেনমার্ক করতে চাই। এই জাতীয় মানদণ্ড চালানোর কোনও মানক উপায় আছে কি?

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


3
চেক আউট pgbench; আপনি যা চান তা করতে কাস্টম স্ক্রিপ্টগুলি দিয়ে এটি চালাতে পারেন। পিজি থামাতে এবং পুনরায় চালু করতে এবং আপনার প্রয়োজনের বেশিরভাগ ওএস ডিস্ক ক্যাশে ফেলে দেওয়ার জন্য একটি মোড়কের শেল স্ক্রিপ্ট সহ।
ক্রেগ রিঞ্জার

উত্তর:


29

বহুল ব্যবহৃত সরঞ্জামটি হ'ল এসকিউএল কমান্ড EXPLAIN ANALYZE, সম্ভবত উত্তরের আরও বিশদ জন্য আরও বিকল্প রয়েছে। এটি ক্যোয়ারী পরিকল্পনাকে পরিকল্পনাকারীর প্রাক্কলন অনুসারে বাস্তব এক্সিকিউশন সময়গুলির সাথে ফলাফল দেয়।

আপনি কেন ক্যাশে সাফ করতে চান? সাধারণত ব্যবহারের ক্ষেত্রে সম্ভবত ক্যাশে জনবহুল হয়। আপনি যদি এখনও সেই রুটে যেতে চান তবে এসও সম্পর্কিত একটি উত্তর এখানে ।

না ক্যাশে রিসেট, এখানে অনেক পুনরাবৃত্তিও সঙ্গে পরীক্ষা দুটি সহজ উপায়:

সাধারণ ইউডিএফ

EXPLAIN ANALYZE
SELECT f_myfunc(g) FROM generate_series (1,1000) AS t(g);

বা এলোমেলো ইনপুট সহ - উদাহরণে 0 থেকে 5000 এর মধ্যে এলোমেলো সংখ্যা:

EXPLAIN ANALYZE
SELECT f_myfunc((random()*5000)::int) FROM generate_series (1,1000) AS t(g);

বা একটি বাস্তব জীবনের টেবিল সহ:

EXPLAIN ANALYZE
SELECT f_myfunc(my_column) FROM my_tbl;   -- LIMIT n

আরও জটিল ফাংশন / ক্যোয়ারী

CREATE FUNCTION f_test(ct int, sql text) RETURNS void AS
$func$
DECLARE
   i int;
BEGIN

FOR i IN 1 .. $1 LOOP
    EXECUTE sql;  -- not safe against SQLi!
END LOOP;

END
$func$ LANGUAGE plpgsql

কল করুন:

EXPLAIN ANALYZE
SELECT f_test(100, $x$SELECT * from MADLIB.gp('mock3', '{x1, x2, x3}', '{y1}', 100,20, 3)$x$

যত্নশীল : ক্যোয়ারীটি আসলে কার্যকর করা হয়েছে!
যত্নশীল : জনসাধারণের ব্যবহারের জন্য উপযুক্ত নয়। সম্ভাব্য এসকিউএল ইঞ্জেকশন।

আবার প্রয়োজনে আপনি এলোমেলো প্যারামিটার ব্যবহার করতে পারেন। সম্ভবত এর USINGধারা সঙ্গে EXECUTE

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