পোস্টগ্রিসএসকিউএল চেকপয়েন্টে কী ঘটে?


22

এখানে আমার চেকপয়েন্ট লগের অংশ:

2014-03-26 11:51:29.341 CDT,,,18682,,532854fc.48fa,4985,,2014-03-18 09:15:24 CDT,,0,LOG,00000,"checkpoint complete: wrote 15047 buffers (1.4%); 0 transaction log file(s) added, 0 removed, 30 recycled; write=68.980 s, sync=1.542 s, total=70.548 s; sync files=925, longest=0.216 s, average=0.001 s",,,,,,,,,""
2014-03-26 11:56:05.430 CDT,,,18682,,532854fc.48fa,4987,,2014-03-18 09:15:24 CDT,,0,LOG,00000,"checkpoint complete: wrote 16774 buffers (1.6%); 0 transaction log file(s) added, 0 removed, 31 recycled; write=72.542 s, sync=17.164 s, total=89.733 s; sync files=885, longest=3.812 s, average=0.019 s",,,,,,,,,""
2014-03-26 12:01:21.650 CDT,,,18682,,532854fc.48fa,4989,,2014-03-18 09:15:24 CDT,,0,LOG,00000,"checkpoint complete: wrote 14436 buffers (1.4%); 0 transaction log file(s) added, 0 removed, 33 recycled; write=122.350 s, sync=5.212 s, total=127.676 s; sync files=924, longest=3.740 s, average=0.005 s",,,,,,,,,""
2014-03-26 12:06:25.028 CDT,,,18682,,532854fc.48fa,4991,,2014-03-18 09:15:24 CDT,,0,LOG,00000,"checkpoint complete: wrote 13277 buffers (1.3%); 0 transaction log file(s) added, 0 removed, 29 recycled; write=126.217 s, sync=5.733 s, total=131.991 s; sync files=894, longest=1.859 s, average=0.006 s",,,,,,,,,""
2014-03-26 12:10:41.958 CDT,,,18682,,532854fc.48fa,4993,,2014-03-18 09:15:24 CDT,,0,LOG,00000,"checkpoint complete: wrote 20765 buffers (2.0%); 0 transaction log file(s) added, 0 removed, 28 recycled; write=88.015 s, sync=10.818 s, total=98.872 s; sync files=881, longest=2.690 s, average=0.012 s",,,,,,,,,""

আমি লক্ষ্য করেছি যে কখনও কখনও আমাদের ডাটাবেস খুব ধীর হয় - আপনি এখন থেকে অনেক দীর্ঘ সময়ের জন্য আটকে থাকা সাধারণভাবে সংক্ষিপ্ত প্রশ্নের একটি খুব বড় সংখ্যা দেখতে পাবেন see এটি পরিষ্কার অপরাধী ছাড়া নিয়মিত ঘটে happens

প্রশ্ন: চেকপয়েন্টে এর কারণ হতে পারে? চেকপয়েন্টের "সিঙ্ক" পর্যায়ে কী ঘটে?

উত্তর:


32

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

এর অর্থ এটি যদি ক্রাশ হয় তবে ডিস্ক টেবিলগুলি টু ডেট থাকবে না। এটি ব্যাক আপ শুরু করার আগে, অন-ডিস্ক টেবিলগুলিতে পরিবর্তনগুলি প্রয়োগ করে, লেনদেনের লগগুলি পুনরায় খেলতে হবে। এটি একটি বিশাল, ব্যস্ত ডাটাবেসের জন্য কিছুটা সময় নিতে পারে।

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

এই ফ্লাশ দুটি পর্যায়ে ঘটে:

  • টেবিলগুলিতে write()নোংরা বাফার shared_buffers; এবং
  • fsync() পরিবর্তনগুলি সত্যই ডিস্কে আঘাত করে তা নিশ্চিত করতে প্রভাবিত ফাইলগুলির

এই উভয়ই ডিস্ক I / O বোঝা বাড়াতে পারে। এই লেখাগুলির কারণে সৃষ্ট বিতর্ক পাঠকে মন্থর করতে পারে এবং লেনদেন করার জন্য প্রয়োজনীয় ওয়াল বিভাগগুলি ফ্লাশ করাও কমিয়ে দিতে পারে।

এটি একটি দীর্ঘকালীন চ্যালেঞ্জ ছিল, তবে আরও বেশি র‌্যামযুক্ত সিস্টেমগুলি দেখতে আমরা আরও খারাপ হয়ে যাচ্ছি যাতে তারা আরও ডেটা বাফার করতে পারে এবং এটিকে লিখতে আরও বেশি সময় নিতে পারে। এই LWN.net নিবন্ধে যেমন আলোচনা করা হয়েছে, এই মুহুর্তে কীভাবে এটি মোকাবেলা করতে হবে সে সম্পর্কে লিনাক্স এবং পোস্টগ্রিসকিউএল সম্প্রদায়ের মধ্যে আলোচনা রয়েছে । (লোকজন সাবস্ক্রাইব না করলে LWN.net এই ধরণের দুর্দান্ত কাজটি লিখতে সক্ষম হবেনা I'm সভভেওাবসগত.)

এই মুহুর্তে চেকপয়েন্টগুলির প্রভাব হ্রাস করতে আপনি যে প্রধান জিনিসটি করতে পারেন তা হ'ল চেকপয়েন্টের ক্রিয়াকলাপটি বাড়িয়ে বাইরে ছড়িয়ে দেওয়া checkpoint_completion_targetযাতে চূড়ান্ত চেকপয়েন্ট পৌঁছানোর সময় পর্যন্ত আরও বেশি তথ্য লিখিত হয়। এটির একটি ব্যয় রয়েছে, যদিও - আপনি যদি কোনও পৃষ্ঠা দশবার আপডেট করেন (বলুন) উচ্চ ধরণের সমাপ্তির লক্ষ্যমাত্রা সহ এটি চেকপয়েন্টের আগে একাধিকবার ডিস্কে লেখা যেতে পারে, যদিও এটি ক্রাশ সুরক্ষার জন্য কেবল একবার কঠোরভাবেই লিখতে হয়েছিল। একটি উচ্চতর সমাপ্তির লক্ষ্য স্মুথ I / O নিদর্শনগুলিতে তৈরি করে তবে সামগ্রিকভাবে I / O ওভারহেড।

আপনি যে অপারেটিং সিস্টেমটি সাহায্য করতে পারেন তা হ'ল আপনার অপারেটিং সিস্টেমটিকে তাত্ক্ষণিকভাবে ডেটা লেখা শুরু করতে বলুন যখন এটি বাফার হয়ে যায়। এটি সেটিংয়ের কার্নেল পাশের মতো checkpoint_completion_targetএবং একই রকম বাণিজ্য বন্ধ রয়েছে। দেখুন লিনাক্স VM ডকুমেন্টেশন বিশেষ করে dirty_background_bytes, dirty_background_ratio, dirty_expire_centisecs


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

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

1

মলিন ওএস ফাইল সিস্টেম মাত্রাধিক দ্বারা সৃষ্ট বাফার অনিদ্রা dirty_bytesবা dirty_ratio হয় একটি ফোরগ্রাউন্ড অপারেশন ব্লক!

কার্নেল tunables dirty_bytes, dirty_background_bytes, dirty_ratio, dirty_background_ratioএবং dirty_centisecsনিয়ন্ত্রণ মলিন ওএস ফাইল সিস্টেম বাফার এর ডিস্কে অনিদ্রা। dirty_bytesবাইটের dirty_ratioপ্রান্তিকতা, মোট মেমরির অনুপাত হিসাবে প্রান্তিকতা। dirty_background_bytesএবং dirty_background_ratioঅনুরূপ প্রান্তিকতা, তবে ফ্লাশিং পটভূমিতে ঘটে এবং এটি সম্পূর্ণ না হওয়া পর্যন্ত অন্যান্য পঠন / লেখার ক্রিয়াকে অবরুদ্ধ করে না। dirty_centisecsফ্লাশ শুরু হওয়ার আগে কত শতকরা সেকেন্ডে যেতে পারে।

আধুনিক এই মেশিনগুলির জন্য মেমরির আকার নাটকীয়ভাবে বৃদ্ধি পাওয়ায় সম্প্রতি এই সুরগুলির জন্য ডিফল্টগুলি লিনাক্সে হ্রাস করা হয়েছিল। এমনকি 256 গিগাবাইট মেশিনের জন্য dirty_background_ratioএবং তার পক্ষে 5 এবং 10% এর dirty_ratioঅনুপাতও আই / ও সিস্টেমে প্লাবন করতে পারে।

পটভূমিতে নোংরা বাফারগুলি টিউন করা dirty_background_bytesবা ফ্লোশিং dirty_background_ratioশুরু করা দুরূহ। ভাগ্যক্রমে আপনি পোস্টগ্রের এসকিউএল বা হোস্টকে উপযুক্ত ফাইলগুলিতে নতুন মান প্রতিধ্বনি না করেই এই সেটিংস টিউন করতে পারেন:

$ sudo echo [int value of bytes] > /proc/sys/vm/dirty_background_bytes

উদাহরণস্বরূপ, ব্যাকগ্রাউন্ড ফ্লাশটি ট্রিগার করতে ডাইর্টেড বাইটের সংখ্যা সেট করা। আপনি যদি একটি ব্যাটারি ব্যাকআপ, ক্যাপাসিটরের সমর্থিত, অথবা ফ্ল্যাশ মেমরি RAID কার্ড (আপনি ব্যবহার করে থাকেন না আপনি না, একটি ক্র্যাশ ক্ষেত্রে আপনার ডেটা রাখতে চান না?) টিউনিং করে শুরু dirty_background_bytes1/2 লেখার ক্যাশে বাফার মাপ এবং dirty_bytesআকার 3/4। আইওস্ট্যাটসের সাহায্যে আপনার আই / ও প্রোফাইলটি পর্যবেক্ষণ করুন এবং যদি আপনি এখনও বিলম্বিত সমস্যাগুলি দেখেন যার অর্থ আপনার ডাটাবেস লেখার বোঝাটি এখনও ফাইল বাফার ক্যাশে ফ্লাশকে ছাড়িয়ে যাচ্ছে। যতক্ষণ না বিলম্বিতা উন্নতি হয় বা আপনার I / O সাবসিস্টেমটি আপগ্রেড করার কথা বিবেচনা করে ততক্ষণ মানগুলি ঘুরিয়ে দিন। ফিউশনআইও কার্ড এবং এসএসডি চূড়ান্ত আই / ও থ্রুপুট জন্য দুটি সম্ভাবনা।

শুভকামনা!


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