একই স্কিমা / প্রশ্নের জন্য মাইএসকিউএল এবং পোস্টগ্রেএসকিউএলের পারফরম্যান্স পার্থক্য [বন্ধ]


20

আমি একজন নবাগত ডিবিএ, এবং মাইক্রোসফ্ট এসকিউএল সার্ভারে আমার অভিজ্ঞতা আছে তবে আমি এফএলওএসএসে ঝাঁপিয়ে পড়তে চাই।

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

আমি একটি বাস্তব কর্ম পরীক্ষা করেছি:

  • সমান কলামের ডেটাটাইপগুলির সাথে সারণীতে একই কলাম।
  • সারি একই সংখ্যা।
  • উভয় একই সূচক (প্রাথমিক কী অন্তর্ভুক্ত)।
  • সিপিইউ লোড নিষ্ক্রিয় এবং পোস্টগ্রিস মেশিন এটি উল্লেখযোগ্যভাবে আরও ভাল।
  • এবং একই ক্যোয়ারী (স্পষ্টতই)।

আমি কি ভুল করছি?

PS: আমি ডাটাবেস ইঞ্জিনগুলির জন্য পারফরম্যান্স টিউনিংয়ের উপর অনেক "হাওটোস" পড়েছি।
পিএস (২): আমরা মাইএসকিউএল ডাটাবেসে ইনোডিবি (টেবিলের জন্য এক ফাইল) ব্যবহার করছি।


হাই ম্যাট!

আমি তিনটি সাধারণ সিলেক্ট (এবং সবচেয়ে কঠোর) কোয়েরি করেছি।

ডিস্ক সম্পর্কে প্রশ্ন, অবশ্যই এটি একই নয়; পোস্টগ্রিসে এটি একটি এসএসডি (প্রায় তিনবারের দ্রুততম)।

মাইএসকিউএল ক্যাশে ডেটা:

+------------------------------+----------------------+
| Variable_name                | Value                |
+------------------------------+----------------------+
| binlog_cache_size            | 32768                |
| have_query_cache             | YES                  |
| key_cache_age_threshold      | 300                  |
| key_cache_block_size         | 1024                 |
| key_cache_division_limit     | 100                  |
| max_binlog_cache_size        | 18446744073709547520 |
| query_cache_limit            | 1048576              |
| query_cache_min_res_unit     | 4096                 |
| query_cache_size             | 16777216             |
| query_cache_type             | ON                   |
| query_cache_wlock_invalidate | OFF                  |
| table_definition_cache       | 256                  |
| table_open_cache             | 64                   |
| thread_cache_size            | 8                    |
+------------------------------+----------------------+

পোস্টগ্র্রেএসকিউএল এ কীভাবে দেখতে হয় তা আমি জানি না।

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


আমার ইংরাজির জন্য দুঃখিত
জাভিয়ের ভ্যালেন্সিয়া

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

1
আপনি কি ক্যোয়ারী এবং পোস্টগ্রিজ এক্সিকিউশন প্ল্যান ব্যবহার করে পোস্ট করতে পারেন explain analyze। এটি পড়া সহজতর করার জন্য, আপনি ব্যাখ্যাটি পরিকল্পনাটি আপলোড করতে পারেন। ডিপেস.কম
এ_হর্স_উইথ_নো_নাম

1
পোস্টগ্রিস যদি এসএসডি তে চলমান থাকে তবে আপনাকে অবশ্যই সুর করতে হবেpostgresql.conf
এ_ ঘোড়া_বিহীন_নো_নাম

1
@ জাভিয়ারভ্যালেন্সিয়া: আপনি যদি সমস্যাটি সমাধান করতে সক্ষম হন তবে দয়া করে একটি উত্তর যুক্ত করুন যাতে আপনি কী করেছিলেন যাতে অন্যরা সেখান থেকে শিখতে পারে। এই প্রশ্নটিকে সমাধান হিসাবে চিহ্নিত করতে আপনি নিজের উত্তরও মেনে নিতে পারেন
a_horse_with_no_name

উত্তর:


41

মাইএসকিউএল এবং পোস্টগ্রাইএসকিউএল পারফরম্যান্স অনুযায়ী পার্থক্যযুক্ত। InnoDB এবং PostgreSQL টেবিলগুলি বিভিন্ন ধরণের প্রশ্নের জন্য অনুকূলিত হয়েছে। এই পার্থক্যগুলি বোঝা কীভাবে উভয়ের মধ্যে থেকে কীভাবে ভাল পারফরম্যান্স পাওয়া যায় তা বোঝা গুরুত্বপূর্ণ।

একটি উদাহরণ হিসাবে, আসুন সবচেয়ে সুস্পষ্ট পার্থক্য তাকান।

পোস্টগ্রাইএসকিউএল বনাম মাইএসকিউএল / ইনোডিবি সারণি কাঠামো এবং এটি পারফরম্যান্সের জন্য কী

সাধারণভাবে, জটিল কাজের চাপে পোস্টগ্রিএসকিউএল দ্রুত হবে, তবে সাধারণ প্রাথমিক কী লুপআপসে ইনোডিবি সহ মাইএসকিউএল দ্রুত হবে।

পোস্টগ্রিএসকিউএল টেবিল হিপ টেবিল। কোনও টেবিল তৈরির কোনও বিকল্প নেই যা হিপ টেবিল নয়। clusterকমান্ড কেবল গাদা একটি নির্দিষ্ট সূচক দ্বারা আদেশ নতুন করে লেখা হয়। সূচীগুলি তারপরে বিভিন্ন মান সহ টিপলগুলির জন্য স্তূপ স্থান সরবরাহ করে। সূচকগুলি দৈহিক ক্রমে বিভ্রান্ত করা যায় না, কেবলমাত্র যৌক্তিক ক্রম যাতে তাদের প্রচুর র্যান্ডম ডিস্ক আই / ও থাকে যখন ক্রমানুসারে একটি টেবিল পড়ার সাধারণত সাধারণত প্রচুর সিক্যুয়াল ডিস্ক আই / ও হয়, যেহেতু আপনি শারীরিক ক্রমে কোনও টেবিলটি পড়তে পারেন। সিক্যুয়ালটিভ ডিস্ক আই / ও পঠিত-সামনের ক্যাশে এবং কিছু অন্যান্য ওএস-স্তরের অপ্টিমাইজেশন ব্যবহার করতে পারে।

এর অর্থ হ'ল যদি আপনার রেকর্ডের একটি উল্লেখযোগ্য অংশ বা কয়েকটি পৃষ্ঠাগুলির প্রয়োজন হয় তবে কেবলমাত্র ডিস্ক থেকে পৃষ্ঠাগুলি পড়া খুব দ্রুত হয়। অন্যদিকে, একটি টেবিলের জন্য প্রাথমিক কী অনুসন্ধানের জন্য সূচকটি হিট করা প্রয়োজন, ফাইলের অবস্থানটি অনুসন্ধান করা উচিত তারপরে হিপ টেবিলটি চাপুন এবং রেকর্ডটি টানুন। এর অর্থ র‌্যান্ডম ডিস্কের অনেকগুলি অংশ I / O

InnoDB একটি ভিন্ন পদ্ধতির ব্যবহার করে। InnoDB সহ, টেবিলটি একটি বি-ট্রিড সূচক যা ইনডেক্সের পেডে আসল ডেটা। এর অর্থ হ'ল একটি প্রাথমিক কী অনুসন্ধান ইতিমধ্যে পাতার পৃষ্ঠা থেকে ডেটা টানতে পারে, এবং এর জন্য কম / কম র্যান্ডম ডিস্কের প্রয়োজন required একই সময়ে, একটি সূচক স্ক্যানের জন্য একের পরিবর্তে দুটি সূচকে অনুসরণ করতে হবে, যার অর্থ প্রাথমিক কী ব্যতীত অন্য কোনও সূচকের ব্যবহার ধীর হয়ে যায় এবং ক্রমিক স্ক্যানগুলি ধীর হয়।

পোস্টগ্র্যাস এসকিউএলএ নির্ণয় করা

আমি মনে করি আপনি এর মতো কিছু ব্যবহার করতে চান:

 EXPLAIN (analyse, buffers, verbose)
 [query];

এটি আপনাকে ক্যোয়ারী প্ল্যান, প্রাথমিক অনুমান, আসল সময়, বাফার ব্যবহার এবং আরও অনেক কিছু দেবে।



@ ক্রিসট্রাভার্স একটি দুর্দান্ত উত্তরের জন্য ধন্যবাদ! আপনি বলেছিলেন: "... (InnoDB এর) ক্রমিক স্ক্যানগুলি ধীর"। আপনি কি অনুগ্রহ করে এই প্রসঙ্গে ক্রমিক স্ক্যান বলতে কী বোঝাতে চেয়েছিলেন?
ভিবি_

ধন্যবাদ। আমি উত্তরটি পরিবর্তন করব। ইনোডিবিতে "সিক্যুয়েনাল" স্ক্যানগুলি ইনডেক্স-লজিকাল ক্রমে থাকে যাতে আপনার আরও এলোমেলো আই / ও থাকে এবং পঠন-সামনের ক্যাচিং থেকে কোনও সহায়তা পাওয়া যায় না।
ক্রিস ট্র্যাভারস

সুন্দর উত্তরের জন্য ধন্যবাদ। পোস্টগ্রিসের অভ্যন্তরীণ সম্পর্কে আগ্রহী যে কারও জন্য, আমি এই পোস্টটি সুপারিশ করছি: interdb.jp/pg/pgsql01.html কীভাবে পোস্টগ্রিস স্টোর ডেটা হ্যাপ টেবিল হিসাবে ব্যাখ্যা করে তা ব্যাখ্যা করুন।
htt
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.