আমি কীভাবে পোস্টগ্রিস্কল লেনদেনের লগগুলির জন্য অনুরোধ করতে পারি?


11

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

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

এই ডাটাবেসটিকে কখনই ব্যাক আপ করা হয় না কারণ সফ্টওয়্যারটি ভিন্ন উপায়ে ব্যাকআপগুলি সম্পাদন করে (এটির নিজস্ব ব্যাকআপ পদ্ধতি রয়েছে এবং ইমেলের মাধ্যমে ব্যাকআপ ফাইলগুলি প্রেরণ করে) এবং আমি মনে করি যে ডাব্লুএএফগুলি এত বাড়ছে এই কারণেই।

আমি আশঙ্কা করছি যে আমি পোস্টগ্রিজ এসকিউএল বিশেষজ্ঞ হতে অনেক দূরে তাই সম্ভবত খুব সম্ভবত আমি নির্বোধ বা স্পষ্ট প্রশ্ন জিজ্ঞাসা করছি তবে, ওয়াল ফাইলগুলি সরিয়ে দেওয়ার অনুরোধ করার পদ্ধতিটি কী?

আদর্শভাবে, আমি এমন একটি পদ্ধতির সন্ধান করছি যা আমাকে বিক্রেতাকে আরও ভাল করে ফিক্স দেওয়ার জন্য পর্যাপ্ত সময় ক্রয়ের জন্য সমস্যাযুক্ত সিস্টেমে এই ওয়াল ফাইলগুলি ফ্লাশ করতে দেয়।

সম্পাদনা : অনুরোধ হিসাবে, এখানে SELECT version();ক্যোয়ারির আউটপুট দেওয়া হল :

 PostgreSQL 9.2.4 on i686-pc-linux-gnu, compiled by gcc (SUSE Linux) 4.3.4 [gcc-4_3-branch revision 152973], 32-bit

(1 সারি)

এবং SELECT name, current_setting(name), source FROM pg_settings WHERE source NOT IN ('default', 'override');কোয়েরি

 hot_standby                      | on                  | configuration file
 listen_addresses                 | *                   | configuration file
 log_destination                  | syslog              | configuration file
 log_min_duration_statement       | -1                  | configuration file
 log_min_error_statement          | error               | configuration file
 log_min_messages                 | notice              | configuration file
 maintenance_work_mem             | 512MB               | configuration file
 max_connections                  | 300                 | configuration file
 max_files_per_process            | 1000                | configuration file
 max_prepared_transactions        | 0                   | configuration file
 max_stack_depth                  | 2MB                 | configuration file
 max_standby_streaming_delay      | 10s                 | configuration file
 max_wal_senders                  | 10                  | configuration file
 password_encryption              | on                  | configuration file
 pg_stat_statements.max           | 1000                | configuration file
 pg_stat_statements.save          | on                  | configuration file
 pg_stat_statements.track         | all                 | configuration file
 pg_stat_statements.track_utility | off                 | configuration file
 port                             | 5432                | configuration file
 random_page_cost                 | 2                   | configuration file
 replication_timeout              | 1min                | configuration file
 seq_page_cost                    | 1                   | configuration file
 shared_buffers                   | 512MB               | configuration file
 shared_preload_libraries         | pg_stat_statements  | configuration file
 ssl                              | off                 | configuration file
 stats_temp_directory             | pg_stat_tmp         | configuration file
 superuser_reserved_connections   | 20                  | configuration file
 synchronous_commit               | local               | configuration file
 syslog_facility                  | local0              | configuration file
 syslog_ident                     | postgres            | configuration file
 temp_buffers                     | 256MB               | configuration file
 temp_file_limit                  | -1                  | configuration file
 TimeZone                         | GMT                 | configuration file
 timezone_abbreviations           | AlmostAll           | configuration file
 track_activities                 | on                  | configuration file
 track_activity_query_size        | 4096                | configuration file
 track_counts                     | on                  | configuration file
 track_functions                  | none                | configuration file
 track_io_timing                  | on                  | configuration file
 unix_socket_directory            | /var/run/postgresql | configuration file
 unix_socket_group                | postgres            | configuration file
 unix_socket_permissions          | 0777                | configuration file
 update_process_title             | on                  | configuration file
 vacuum_defer_cleanup_age         | 0                   | configuration file
 wal_buffers                      | 16MB                | configuration file
 wal_keep_segments                | 100                 | configuration file
 wal_level                        | hot_standby         | configuration file
 wal_receiver_status_interval     | 5s                  | configuration file
 work_mem                         | 512MB               | configuration file
(69 rows)

Edit2

শেষ পর্যন্ত আমরা পুরো সার্ভারটি পুনরায় ইনস্টল করেছি (সোফোসের সমর্থন অনুসারে অনুরোধ করা হয়েছে) তবে পূর্ববর্তী সংস্করণ এবং বৃহত্তর ডিস্ক ব্যবহার করে। স্পষ্টতই, পুরানো সংস্করণটি ওয়াল এর জন্য নতুনটির চেয়ে অনেক কম জায়গা ব্যবহার করছে।

কৌতূহলের বাইরে, আমি সংস্করণ এবং 7 টন-ডিফল্ট pgsql পরামিতিগুলির জন্য চেক চালিয়েছি এবং আমি বেশ আলাদা ফলাফল পেয়েছি:

PostgreSQL 8.4.14 on i686-pc-linux-gnu, compiled by GCC gcc (SUSE Linux) 4.3.4 [gcc-4_3-branch revision 152973], 32-bit

এবং

              name               | current_setting |        source
---------------------------------+-----------------+----------------------
 autovacuum_analyze_scale_factor | 0.0005          | configuration file
 checkpoint_segments             | 12              | configuration file
 checkpoint_warning              | 0               | configuration file
 escape_string_warning           | off             | configuration file
 fsync                           | on              | configuration file
 listen_addresses                | *               | configuration file
 log_destination                 | syslog          | configuration file
 log_timezone                    | Europe/Zurich   | command line
 maintenance_work_mem            | 1GB             | configuration file
 max_connections                 | 300             | configuration file
 max_stack_depth                 | 2MB             | environment variable
 port                            | 5432            | configuration file
 shared_buffers                  | 32MB            | configuration file
 standard_conforming_strings     | off             | configuration file
 syslog_facility                 | local0          | configuration file
 syslog_ident                    | postgres        | configuration file
 temp_buffers                    | 1024            | configuration file
 TimeZone                        | UTC             | configuration file
 timezone_abbreviations          | AlmostAll       | configuration file
 work_mem                        | 512MB           | configuration file
(20 rows)

আমার কাছে মনে হচ্ছে এই দুটি সংস্করণের মধ্যে বেশ পরিবর্তন হয়েছে।

উত্তর:


9

সম্ভবত আপনি যা দেখছেন তা একটি বিশাল checkpoint_segmentsমূল্য এবং দীর্ঘ checkpoint_timeout; পর্যায়ক্রমে, তারা wal_keep_segmentsস্ট্রিমিংয়ের প্রতিরূপ সমর্থন করতে পারে বলে মনে হয় তারা খুব বড় মান সেট করতে পারে ।

আপনি CHECKPOINTকমান্ড দিয়ে একটি চেকপয়েন্ট জোর করতে পারেন । এটি যদি বিশাল পরিমাণে ওয়াল সংগ্রহ করে এবং ব্যাকগ্রাউন্ড-লিখন না করে থাকে তবে এটি ডেটাবেসটিকে কিছু সময়ের জন্য স্টল করতে পারে। যদি checkpoint_completion_targetকম হয় (0.8 বা 0.9 এর চেয়ে কম) তবে চেকপয়েন্টের সময় কাজ করার একটি বড় ব্যাকলগ হওয়ার সম্ভাবনা রয়েছে । চেকপয়েন্টের সময় ধীর এবং প্রতিক্রিয়াহীন হয়ে উঠতে ডাটাবেসের জন্য প্রস্তুত থাকুন। একবার চেকপয়েন্টটি স্বাভাবিক মাধ্যমে শুরু করার পরে আপনি এটি বাতিল করতে পারবেন না; আপনি ডাটাবেস ক্র্যাশ করতে পারেন এবং এটি পুনরায় চালু করতে পারেন, তবে এটি আপনাকে যেখানে ছিল সেখানে ফিরিয়ে দেয়।

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

ডাটাবেসটির সঠিক ব্যাকআপ পাওয়ার জন্য - pg_dump -Fc dbnameপ্রতিটি ডাটাবেস ডাম্প করার জন্য এবং pg_dumpall --globals-onlyব্যবহারকারীর সংজ্ঞা ডাম্প করার জন্য এখন খুব ভাল সময় হবে

আপনি ডাউনটাইম সামর্থ্য করতে পারেন, ডাটাবেজ বন্ধ এবং সমগ্র ডেটা ডিরেক্টরিতে একটি ফাইল-সিস্টেম লেভেলে অনুলিপি (ফোল্ডারের ধারণকারী নেওয়া pg_xlog, pg_clog, global, base, ইত্যাদি)। সার্ভার চলমান অবস্থায় এটি করবেন না এবং কোনও ফাইল বা ফোল্ডার বাদ দিবেন না, সেগুলি সব গুরুত্বপূর্ণ (ভাল, ব্যতীত pg_log, তবে যাইহোক পাঠ্য লগগুলি রাখা ভাল ধারণা)।

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

SELECT version();

SELECT name, current_setting(name), source
  FROM pg_settings
  WHERE source NOT IN ('default', 'override');

এটি সম্ভব হয় যে checkpoint_completion_target = 1ডিবিটিকে পুনরায় চালু এবং পুনরায় চালু করার ফলে সেটি আক্রমণাত্মকভাবে ওয়েল-আপ সারিবদ্ধভাবে লেখা শুরু করতে পারে । এটি কোনও চেকপয়েন্ট না করা পর্যন্ত এটি মুক্ত করবে না, তবে আপনি একবার লেখার কার্যকলাপটি ধীর হয়ে যাওয়ার জন্য বাধ্য করতে পারেন (যেমন সর, আইওস্ট্যাট ইত্যাদি হিসাবে পরিমাপ করা হয়)। আমি checkpoint_completion_targetপুনরায় চালু করার সময় ইতিমধ্যে লিখিত ওয়ালকে প্রভাবিত করে কিনা তা পরীক্ষা করে দেখিনি ; আপনাকে initdbপ্রথমে অন্য একটি মেশিনে পোস্টগ্র্রেএসকিউএল পরীক্ষামূলকভাবে পরীক্ষা করার বিষয়টি বিবেচনা করুন ।

ওয়াল ধরে রাখার এবং বৃদ্ধির সাথে ব্যাকআপগুলির কোনও সম্পর্ক নেই; এটি ব্যাকআপ সম্পর্কিত নয়।

দেখা:


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

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

@ স্টাফেন আপনার wal_keep_segmentsসেট করা আছে 100, এর অর্থ হ'ল মাস্টার সার্ভারের আর আর প্রয়োজন না হলে আপনার স্ট্রিমিং প্রতিরূপ দ্বারা ব্যবহারের জন্য ১.6 গিগাবাইট পর্যন্ত ওয়াল সংরক্ষণাগার রাখা উচিত। আপনি যদি স্ট্রিমিংয়ের প্রতিলিপি ব্যবহার না করেন (মাস্টার সার্ভার হিসাবে) আপনি wal_keep_segmentsশূন্যতে সেট করতে পারেন এবং সেই স্থানটি পুনরায় অর্জন করতে পারেন । আপনার checkpoint_segmentsডিফল্ট বলে মনে হচ্ছে, তাই আপনার যদি ওয়াল না হয় তবে আপনার কাছে ওয়াল এর 3 * 16 = 48MB এর বেশি কিছু থাকা উচিত নয় wal_keep_segments। এটি আপনি যে অন্বেষণ করেছেন তাও অদ্ভুত hot_standby- এটি কি একটি প্রতিলিপি?
ক্রেগ রিঞ্জার

আবার ধন্যবাদ. সিস্টেমটি কোনও প্রতিরূপের অংশ নয় তবে সফ্টওয়্যার যা এটি ব্যবহার করে (সোফো ইউটিএম ফায়ারওয়াল) সক্রিয় / প্যাসিভ ফেইলওভার মোডে ব্যবহার করা যেতে পারে তাই এটি ডিফল্টরূপে সেটআপ করা সম্ভব।
স্টিফেন

@ স্টাফেন হ্যাঁ, এটি হবে। আমি ব্যক্তিগতভাবে পোস্টগ্র্যাস এসকিউএল চালু এবং পুনরায় চালু wal_keep_segmentsকরতে চাই 0। আমি যাচাই করি নি যে এটি অবাঞ্ছিত ওয়ালটি সরিয়ে ফেলবে, তবে আমি এটিটি আশা করি। আমি এটি ম্যানুয়ালি সরানোর প্রস্তাব দিই না; ভুল ওয়াল সংরক্ষণাগার ফাইলগুলি অপসারণ করা আপনার ডেটাবেসকে কাজ করা থেকে পুরোপুরি থামিয়ে দেবে।
ক্রেগ রিঞ্জার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.