পোস্টগ্রিএসকিউএল: আমি কি লাইভ, চলমান ডিবিতে লোডের নিচে pg_start_backup () করতে পারি?


19

আমাদের প্রতিষ্ঠিত প্রতিলিপিটি ভেঙে গেছে (ডাউনটাইমের সময় "অনুরোধ করা ওয়াল বিভাগটি ইতিমধ্যে সরানো হয়েছে") আমরা আবার মাস্টারটিকে সহজে থামাতে পারি না।

আমরা কি করতে পারি

  1. pg_start_backup(),
  2. rsync ${PGDATA}/ দাসকে মাস্টার,
  3. pg_stop_backup()

... যখন মাস্টার পোস্টগ্রেস্কেল এখনও পুরো বোঝার মধ্যে রয়েছে? (বা pg_start_backup()নেতৃত্ব দেবে

  • টেবিল লক,
  • আই / ও ব্লক,
  • অসঙ্গতি,
  • অগ্নি বিপদাশঙ্কা,
  • ধীর ডিবি প্রতিক্রিয়া

অন্য কথায়, pg_start_backup()আমাদের প্রয়োগ প্রভাবিত করবে ?


আপনি কি ডক্স পরীক্ষা করেছেন ? এটিতে বলা হয়েছে "ডিফল্টরূপে, pg_start_backupটি শেষ হতে অনেক সময় নিতে পারে This এটি কারণ এটি একটি চৌকিটি করে, এবং চেকপয়েন্টের জন্য প্রয়োজনীয় I / O একটি নির্দিষ্ট সময়ের মধ্যে ছড়িয়ে দেওয়া হবে, ডিফল্টরূপে আপনার আন্তঃ-চৌকিস্তুতে অর্ধেক বিরতি (কনফিগারেশন প্যারামিটার চেকপয়েন্ট_কম্পলেশন_টারজেট দেখুন) এটি সাধারণত আপনি যা চান তাই এটি ক্যোয়ারী প্রসেসিংয়ের উপর প্রভাবকে হ্রাস করে। " বাস্তবে এর অর্থ কী (এবং আপনার ক্ষেত্রে) তবে তা পুরোপুরি পরিষ্কার নয়।
dezso

উত্তর:


11

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

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

আপনি ব্যবহার করতে পারেন niceএবং ioniceI / O প্রভাব সীমাবদ্ধ করতে সহায়তা করতে (তবে ক্যাশে প্রভাবটি নয়); তবে, এটির জন্য একটি ব্যয় আছে। ব্যাকআপটি আরও বেশি সময় নেবে, এবং যতক্ষণ না আপনি ব্যাকআপটি শেষ করেন এবং pg_stop_backupআপনার সিস্টেমটি চালিত না হওয়া অবধি - ওয়াল জমে এটি মুছতে পারে না, ব্যাকআপ রান শেষে একটি বিআইজি চেকপয়েন্টের জন্য চেকপয়েন্ট debtণ জমা করে এবং টেবিল এবং সূচক জমে থাকে is ফুলে গেছে কারণ এটি মৃত সারিগুলি পরিষ্কার করতে পারে না। তাই আপনি ব্যাকআপ চিরকালের জন্য নিতে পারবেন না, বিশেষত যদি আপনার খুব বেশি মন্থ টেবিল থাকে।

শেষ পর্যন্ত, এটা বলতে কিনা আপনি নিরাপদে ব্যবহার করতে পারেন কঠিন pg_start_backupএবং pg_stop_backupআপনার পরিবেশ গরম ব্যাকআপ জন্য। বেশিরভাগ লোকেরা পারেন, তবে আপনি যদি আপনার হার্ডওয়্যার যা করতে পারেন তার প্রান্তের নিকটে, আঁটসাঁট সময়কালের প্রয়োজনীয়তা থাকতে পারে, স্টলের ঝুঁকি বহন করতে পারে না এবং খুব বেশি মন্থন টেবিলের পাশাপাশি খুব বড় টেবিল থাকে তবে সমস্যাটি হতে পারে ।

দুর্ভাগ্যক্রমে, আপনার এটি পরীক্ষা করে দেখার দরকার খুব দরকার।

আপনি যদি এটি করতে পারেন CHECKPOINTতবে আপনার LVM, আপনার SAN- এর সরঞ্জামগুলি, EBS বা আপনি যা যা করছেন তার পরিবর্তে আপনার ডাটাবেসটি যে ভলিউমের চালু রয়েছে তার একটি পারমাণবিক স্ন্যাপশট গ্রহণ করা উপযুক্ত be আপনি যদি এটি করতে পারেন তবে আপনি আপনার অবসর সময়ে স্ন্যাপশটটি অনুলিপি করতে পারেন। এই পদ্ধতিটি পিআইটিআর / উষ্ণ স্ট্যান্ডবাই / হট স্ট্যান্ডবাইয়ের জন্য বেস ব্যাকআপ নেওয়ার পক্ষে উপযুক্ত নয়, তবে এটি একটি স্ট্যাটিক ব্যাকআপ কপির জন্য পুরোপুরি ভাল, এবং এটি সিস্টেমে খুব কম প্রভাব ফেলে। আপনি কেবল তখনই এটি করতে পারেন যদি আপনার স্ন্যাপশটগুলি পারমাণবিক হয় এবং ওয়াল সহ আপনার সম্পূর্ণ ডাটাবেস যদিও একক ভলিউমে থাকে।

একটি সম্ভাবনা যা আমি এখনও তদন্ত করি নি তা হল দুটি পদ্ধতির সমন্বয়। আমার কাছে এমনটি ঘটে যে সম্ভবত একজন (সম্ভবত অপরীক্ষিত এবং সম্ভবত ভুল এবং অনিরাপদ , আমি এখনও জানি না):

  • pg_start_backup
  • সমস্ত টেবিল স্পেস, প্রধান ডেটাডির এবং এক্সলগ ভলিউমের ট্রিগার স্ন্যাপশট
  • pg_stop_backup
  • ওয়াল থেকে চূড়ান্ত সংরক্ষণাগারটিতে অনুলিপি করুন pg_stop_backup
  • স্ন্যাপশটেড ভলিউম থেকে ডেটা অনুলিপি করুন

মূলত, ধারণাটি হ'ল যে আপনি নিজের অবসর সময়ে অনুলিপি করতে পারবেন এমন প্রতিটি ভলিউমের পয়েন্ট-ইন-সময় নিয়ে ডিবি তার চেকপয়েন্টগুলিতে কতক্ষণ বিলম্ব করতে থাকবে reduce


Pg_start_backup () বেশিরভাগ ক্ষেত্রে "নিয়ন্ত্রিত চেকপয়েন্ট''র একটি জিনিস" বোঝার পরে, আমরা কেবল চেষ্টা করে দেখার চেষ্টা করি। দেখে মনে হচ্ছে চলমান অ্যাপ্লিকেশনটির প্রভাব নগণ্য ছিল। (এসএসডি-তে প্রধান দাতাদির) :-) আপনার প্রস্তাবিত "অরীক্ষিত এবং সম্ভবত অনিরাপদ" ধারণাটি আমাদের যোগ্যতার মাত্রা থেকে কিছুটা উপরে এবং সাহসিকতার জন্য অভিলাষ।
ড্যানিয়েল

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

7

এটি একটি মারাত্মক খনন কিন্তু আমাকে এখানে কিছু সংশোধন করতে হবে।

পূর্ববর্তী উত্তরটি উল্লেখ করা হচ্ছে:

আই / ও প্রভাব সীমাবদ্ধ করতে সহায়তা করতে আপনি সুন্দর এবং আয়নিস ব্যবহার করতে পারেন (তবে ক্যাশে প্রভাবটি নয়); তবে, এটির জন্য একটি ব্যয় আছে। ব্যাকআপটি আরও বেশি সময় নেবে এবং আপনি যতক্ষণ না ব্যাকআপটি শেষ করেন এবং আপনার সিস্টেমটি পিজি_স্টপ_ব্যাকআপ চালাবেন ততক্ষণ - যেমনটি আমি বুঝতে পেরেছি - ওয়াল জমে এটি মুছতে পারে না, ব্যাকআপ রানের শেষে একটি বিআইজি চেকপয়েন্টের জন্য চেকপয়েন্ট debtণ জমা করে এবং টেবিলটি জমে থাকে এবং সূচকটি ফুলে গেছে কারণ এটি মৃত সারিগুলি পরিষ্কার করতে পারে না। তাই আপনি ব্যাকআপ চিরকালের জন্য নিতে পারবেন না, বিশেষত যদি আপনার খুব বেশি মন্থ টেবিল থাকে।

এটা সত্যি না. সিস্টেমটি আপনার কনফিগারেশনে উল্লিখিত ওয়াল নম্বরটি রক্ষা করবে (সিএফ অনলাইন ডকুমেন্টেশন )। সুতরাং মূলত, এর মধ্যে উচ্চতর মান:

  • (2 + চেকপয়েন্ট_কম্পলশন_রটিও) * চেকপয়েন্ট_সেজেন্টস +1
  • wal_keep_segments

আসুন এই ক্ষেত্রেটি কল্পনা করুন:

  • শত শত জিগ অনুলিপি করার কারণে আপনার ব্যাকআপটি দীর্ঘ সময় নিচ্ছে
  • আপনার একটি ছোট ওয়াল ধারণক্ষমতা রয়েছে (উদাহরণস্বরূপ চেকপয়েন্ট_সেজমেন্ট 3 এ)
  • আপনার কাছে ওয়াল সংরক্ষণাগারটি সেটআপ নেই

তারপরে "pg_start_backup ()" শুরু করার পরে, আপনার ওয়াল ফাইলগুলি আপনার ব্যাকআপের সময় ঘুরবে। আপনার ব্যাকআপটি শেষ হয়ে গেলে, আপনি তখন এটি অন্য একটি ডাটাবেস ইঞ্জিনে পুনরুদ্ধার করার চেষ্টা করবেন। আপনি যখন "পিজি_স্টার্ট_ব্যাকআপ ()" জারি করেছিলেন তখন লঞ্চ করার ইঞ্জিনটি কমপক্ষে ওয়াল ফাইল উত্পন্ন করার জন্য জিজ্ঞাসা করবে ।

pg_start_backup 
-----------------
B/D0020F18
(1 row)

আপনি ডাব্লুআইএল ফাইল "0000000x0000000B000000D0" সরবরাহ না করা (যেখানে x আপনার টাইমলাইনেড হয় ) না হওয়া পর্যন্ত ডাটাবেস বুট করতে স্বীকার করবে না । সিস্টেমটি বুট করার জন্য এই ওয়াল ফাইলটি সর্বনিম্ন। অবশ্যই, কেবলমাত্র এই ফাইলটির সাহায্যে, আপনি ডেটা হারাবেন, যেহেতু বাকী ডেটা আপনার কাছে নেই ওয়াল ফাইলগুলিতে রয়েছে তবে কমপক্ষে, আপনার একটি কার্যকারী ডাটাবেস ইঞ্জিন থাকবে engine

সুতরাং হয় আপনাকে অবশ্যই ওয়াল সংরক্ষণাগারটি করতে হবে, বা আপনাকে অবশ্যই নিজের দ্বারা ওয়াল ফাইলগুলি সংরক্ষণ করতে হবে, তবে পোস্টগ্র্যাস্কেল এটি আপনার জন্য করবে না।


3
খুব ভাল পর্যবেক্ষণ। pg_basebackup --xlog-method=streamআমি ভুল না হলেও এটি এড়ানো যায় ।
আগামীকাল__

2
হ্যাঁ, পিজি 9.2 থেকে আপনি বেস ব্যাকআপের সাহায্যে ওয়াল স্ট্রিম করতে পারেন। এটি দ্বিতীয় স্ট্রিমটি খুলবে, সুতরাং আপনার max_wal_sendersসর্বনিম্ন 2 থেকে একটি সেট থাকা দরকার ব্যাকআপের শেষে "মিসিং ওয়াল" সমস্যাটি এড়াতে এটি একটি দুর্দান্ত উপায়।
স্টারফিল্ড

4

পোস্টগ্রিসএসকিউএল-এর আমার অভিজ্ঞতার কথা হিসাবে যদি না আপনি এই মুহুর্তে খুব বড় পারফরম্যান্সের প্রভাব না পান তবে এটি তুলনামূলকভাবে নিরাপদ অপারেশন। আপনার যদি এটি থাকে তবে আপনার ক্লায়েন্টের সমস্ত থেকে লেখার জন্য অস্থায়ী বিরতি দেওয়া ভাল।

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

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

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