আপডেটগুলি (সফ্টওয়্যার এবং হার্ডওয়্যার) থেকে ভারী আই / ও এর জন্য কীভাবে অপ্টিমাইজেশন ডাটাবেস


20

অবস্থা আমি PostgreSQL 9.2 ডাটাবেসের যা বেশ প্রচন্ডভাবে সব সময় আপডেট করা হয় না। সিস্টেমটি তাই I / O আবদ্ধ এবং আমি বর্তমানে অন্য একটি আপগ্রেড করার কথা বিবেচনা করছি, কোথায় উন্নতি শুরু করতে হবে সে সম্পর্কে আমার কিছু দিকনির্দেশ দরকার।

গত 3 মাসে পরিস্থিতি কেমন দেখায় তার একটি চিত্র এখানে দেওয়া হয়েছে:

এখানে চিত্র বর্ণনা লিখুন

আপনি দেখতে পাচ্ছেন, বেশিরভাগ ডিস্ক ব্যবহারের জন্য অপারেশন অ্যাকাউন্টগুলি আপডেট করুন। পরিস্থিতিটি আরও বিস্তারিত 3 ঘন্টা উইন্ডোতে কীভাবে দেখায় তার আরও একটি চিত্র এখানে:

এখানে চিত্র বর্ণনা লিখুন

আপনি দেখতে পাচ্ছেন, শীর্ষ লেখার হার 20MB / s এর কাছাকাছি

সফ্টওয়্যার সার্ভারটি উবুন্টু 12.04 এবং পোস্টগ্রেস্কল 9.2 চলছে। আপডেটের ধরণ আইডি দ্বারা চিহ্নিত পৃথক সারিগুলিতে সাধারণত ছোট আপডেট হয়। যেমন UPDATE cars SET price=some_price, updated_at = some_time_stamp WHERE id = some_id। আমি যতটা সম্ভব মনে করি ততই মুছে ফেলেছি এবং অপ্টিমাইজড করেছি এবং সার্ভার কনফিগারেশন (উভয় লিনাক্স কার্নেল এবং পোস্টগ্রিস কনফারেন্স) বেশ অপ্টিমাইজড।

হার্ডওয়্যার হার্ডওয়্যারটি একটি ডেডিকেটেড সার্ভার যা 32 জিবি ইসিসি র‌্যাম, 4x 600 গিগাবাইট 15.000 আরপিএম এসএএস ডিস্ক একটি রেড 10 অ্যারে, বিবিইউ সহ একটি এলএসআই রেইড কন্ট্রোলার দ্বারা নিয়ন্ত্রিত এবং একটি ইন্টেল সিওন ই 3-1245 কোয়াডকোয়ার প্রসেসর।

প্রশ্নাবলি

  • এই ক্যালিবারের একটি সিস্টেম (পড়ুন / লেখেন) এর জন্য গ্রাফগুলি দ্বারা সম্পাদিত পারফরম্যান্স কি যুক্তিসঙ্গত?
  • অতএব আমি কি একটি হার্ডওয়্যার আপগ্রেড করার দিকে বা সফ্টওয়্যারটির গভীর তদন্ত (কর্নেল টুইট, কনফেসস, কোয়েরি ইত্যাদি) সম্পর্কে ফোকাস করব?
  • যদি কোনও হার্ডওয়্যার আপগ্রেড করা হয়, তবে ডিস্কের সংখ্যাটি কী পারফরম্যান্সের কী?

------------------------------হালনাগাদ------------------- ----------------

আমি এখন আমার ডাটাবেস সার্ভারকে পুরানো 15 কে এস এস ডিস্কের পরিবর্তে চারটি ইন্টেল 520 এসএসডি দিয়ে আপগ্রেড করেছি। আমি একই রাইড কন্ট্রোলার ব্যবহার করছি। বিষয়গুলি বেশ উন্নত হয়েছে, আপনি নীচের শিখর থেকে দেখতে পাচ্ছেন I / O এর পারফরম্যান্স প্রায় 6-10 বার উন্নতি হয়েছে - এবং এটি দুর্দান্ত! এখানে চিত্র বর্ণনা লিখুন তবে আমি নতুন এসএসডি-র উত্তর এবং I / O ক্ষমতা অনুসারে 20-50 গুণ উন্নতির মতো আরও কিছু আশা করছিলাম। সুতরাং এখানে আরেকটি প্রশ্ন যায়।

নতুন প্রশ্ন আমার বর্তমান কনফিগারেশনে এমন কি কিছু আছে যা আমার সিস্টেমের আই / ও পারফরম্যান্সকে সীমাবদ্ধ করে (কোথায় বাধা?)

আমার কনফিগারেশন:

/etc/postgresql/9.2/main/postgresql.conf

data_directory = '/var/lib/postgresql/9.2/main'
hba_file = '/etc/postgresql/9.2/main/pg_hba.conf'
ident_file = '/etc/postgresql/9.2/main/pg_ident.conf'
external_pid_file = '/var/run/postgresql/9.2-main.pid'
listen_addresses = '192.168.0.4, localhost'
port = 5432
unix_socket_directory = '/var/run/postgresql'
wal_level = hot_standby
synchronous_commit = on
checkpoint_timeout = 10min
archive_mode = on
archive_command = 'rsync -a %p postgres@192.168.0.2:/var/lib/postgresql/9.2/wals/%f </dev/null'
max_wal_senders = 1
wal_keep_segments = 32
hot_standby = on
log_line_prefix = '%t '
datestyle = 'iso, mdy'
lc_messages = 'en_US.UTF-8'
lc_monetary = 'en_US.UTF-8'
lc_numeric = 'en_US.UTF-8'
lc_time = 'en_US.UTF-8'
default_text_search_config = 'pg_catalog.english'
default_statistics_target = 100
maintenance_work_mem = 1920MB
checkpoint_completion_target = 0.7
effective_cache_size = 22GB
work_mem = 160MB
wal_buffers = 16MB
checkpoint_segments = 32
shared_buffers = 7680MB
max_connections = 400 

/etc/sysctl.conf

# sysctl config
#net.ipv4.ip_forward=1
net.ipv4.conf.all.rp_filter=1
net.ipv4.icmp_echo_ignore_broadcasts=1
# ipv6 settings (no autoconfiguration)
net.ipv6.conf.default.autoconf=0
net.ipv6.conf.default.accept_dad=0
net.ipv6.conf.default.accept_ra=0
net.ipv6.conf.default.accept_ra_defrtr=0
net.ipv6.conf.default.accept_ra_rtr_pref=0
net.ipv6.conf.default.accept_ra_pinfo=0
net.ipv6.conf.default.accept_source_route=0
net.ipv6.conf.default.accept_redirects=0
net.ipv6.conf.default.forwarding=0
net.ipv6.conf.all.autoconf=0
net.ipv6.conf.all.accept_dad=0
net.ipv6.conf.all.accept_ra=0
net.ipv6.conf.all.accept_ra_defrtr=0
net.ipv6.conf.all.accept_ra_rtr_pref=0
net.ipv6.conf.all.accept_ra_pinfo=0
net.ipv6.conf.all.accept_source_route=0
net.ipv6.conf.all.accept_redirects=0
net.ipv6.conf.all.forwarding=0
# Updated according to postgresql tuning
vm.dirty_ratio = 10
vm.dirty_background_ratio = 1
vm.swappiness = 0
vm.overcommit_memory = 2
kernel.sched_autogroup_enabled = 0
kernel.sched_migration_cost = 50000000

/etc/sysctl.d/30-postgresql-shm.conf

# Shared memory settings for PostgreSQL
# Note that if another program uses shared memory as well, you will have to
# coordinate the size settings between the two.
# Maximum size of shared memory segment in bytes
#kernel.shmmax = 33554432
# Maximum total size of shared memory in pages (normally 4096 bytes)
#kernel.shmall = 2097152
kernel.shmmax = 8589934592
kernel.shmall = 17179869184
# Updated according to postgresql tuning

আউটপুট MegaCli64 -LDInfo -LAll -aAll

Adapter 0 -- Virtual Drive Information:
Virtual Drive: 0 (Target Id: 0)
Name                :
RAID Level          : Primary-1, Secondary-0, RAID Level Qualifier-0
Size                : 446.125 GB
Sector Size         : 512
Is VD emulated      : No
Mirror Data         : 446.125 GB
State               : Optimal
Strip Size          : 64 KB
Number Of Drives per span:2
Span Depth          : 2
Default Cache Policy: WriteBack, ReadAhead, Direct, Write Cache OK if Bad BBU
Current Cache Policy: WriteBack, ReadAhead, Direct, Write Cache OK if Bad BBU
Default Access Policy: Read/Write
Current Access Policy: Read/Write
Disk Cache Policy   : Disk's Default
Encryption Type     : None
Is VD Cached: No

(1) .কলামগুলি সূচিযুক্ত না করা হয়, আপনি HOT এর সুবিধা নিতে পারেন ( git.postgresql.org/gitweb/?p=postgresql.git ; a=blob ; f=src/… )। (2)। দিয়ে চেষ্টা synchronous_commit = offএ ডক্স পড়ার পর postgresql.org/docs/9.2/static/wal-async-commit.html । (3)। আপনার কনফিগারেশন দেখতে কেমন? যেমন। এই ক্যোয়ারির ফলাফল:SELECT name, current_setting(name), source FROM pg_settings WHERE source NOT IN ('default', 'override');
বিএমএ

@ বিএমএ আমাকে এই সম্পর্কে সতর্কতা যুক্ত করতে দাও synchronous_commit: '
দেজো

@ ডেজো আমি যে ডক্সটির উল্লেখ করছি সে সম্পর্কে আমার আরও স্পষ্ট হওয়া উচিত ছিল। স্পষ্টির জন্য ধন্যবাদ। যে কারণটি আমি এনেছি তা হ'ল আমাদের সার্ভারগুলির মধ্যে একটি উচ্চ লোডের অধীনে (হাইবারনেট ব্যবহার করে) ভুগছিলেন তাই আমি অ্যাসিঙ্ক কমিটে স্যুইচ করার জন্য একটি জ্ঞাত সিদ্ধান্ত নিয়েছি এবং লোডের 40% কার্যত অদৃশ্য হয়ে গেছে। বেশিরভাগ সিস্টেমে প্রস্তাবিত নয়, তবে নির্দিষ্ট ক্ষেত্রে এটি সার্ভার আপগ্রেড এবং অ্যাপ্লিকেশন পরিবর্তনের মধ্যে সময় কিনতে পারে।
বিএমএ

উত্তর:


10

যদি কোনও হার্ডওয়্যার আপগ্রেড করা হয়, তবে ডিস্কের সংখ্যাটি কী পারফরম্যান্সের কী?

হ্যাঁ, একটি হার্ড ডিস্ক হিসাবে - এমনকি এসএএস - এর একটি মাথা রয়েছে যা চলতে সময় নেয়।

একটি বিশাল আপগ্রেড চান?

এসএএস ডিস্কগুলিকে মেরে ফেলুন, সাটাতে যান। সটা এসএসডি প্লাগ ইন - এন্টারপ্রাইজ স্তর যেমন স্যামসাং ৮৪৩ টি এর মতো।

ফলাফল? আপনি প্রতি ড্রাইভে প্রায় 60.000 (যা 60 হাজার) আইওপিএস করতে পারেন

এই কারণেই ডিএস স্পেসে এসএসডি হত্যাকারী এবং যে কোনও এসএএস ড্রাইভের তুলনায় এত সস্তা। ফাইসিস্ক স্পিনিং ডিস্ক কেবল ডিস্কের আইওপিএস সক্ষমতা ধরে রাখতে পারে না।

আপনার এসএএস ডিস্কগুলি শুরু করার জন্য একটি মাঝারি চয়েস ছিল (অনেকগুলি আইওপিএস পাওয়ার জন্য খুব বড়) উচ্চতর ব্যবহারের ডাটাবেসের জন্য (আরও ছোট ডিস্কের অর্থ অনেক বেশি আইওপিএস হবে) তবে শেষে এসএসডি এখানে গেম চেঞ্জার।

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

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

এবং হ্যাঁ, আপনার আইওপিএস নম্বরগুলি হার্ডওয়ারের জন্য খারাপ দেখাচ্ছে না। আমি যা আশা করব তার মধ্যেই।


6

আপনি যদি এটি সামর্থ্য করতে পারেন তবে রাইটিং-ব্যাকের জন্য ব্যাটারি-ব্যাকযুক্ত র‌্যামের সাহায্যে নিজের কন্ট্রোলারে পৃথক একটি RAID 1 জোড়া ড্রাইভের উপর pg_xlog রাখুন। আপনার সমস্ত কিছু এসএসডি থাকা অবস্থায় pg_xlog এর জন্য স্পিনিং জং ব্যবহার করা প্রয়োজন এমনকি এটি সত্য use

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

সাধারণভাবে, আরও স্পিন্ডেল মানেই বেশি আই / ও ব্যান্ডউইথ।


দুর্ভাগ্যজনকভাবে আমার কাছে রাইড কন্ট্রোলারে কেবলমাত্র চারটি এইচডিডি স্লট রয়েছে। অন্য সমস্ত ডিস্ক এসএসডি হলে আপনি কেন আলাদা আলাদা অ্যারে পিজি_এক্সলোগগুলি রাখবেন?
নীলস ক্রিস্টিয়ান

2
@ নিলস ক্রিস্টিয়ান আমার মনে হয় আমি ঠিক আছি যখন আমি বলি যে বেশিরভাগ সিস্টেমে লেনদেন লগই ডিস্কের উপর সবচেয়ে বেশি লিখিত হয়। এছাড়াও, এটি লেখার সাথে ডেটা লেখার সাথে মূলত সমান্তরাল ঘটে। দু'টি একই সাথে এইচডিডি দিয়ে করা যায় না কারণ মাথাটি হয় পিজি_এক্সলগে অথবা ডেটা ফোল্ডারে থাকে। (গুরুতর সরলীকরণ সতর্কতা!) দুটি কার্য পৃথক করে দুটি স্বাধীন ডিস্ক / অ্যারেগুলিতে আইও বোঝা বিভক্ত করে।
dezso

2
@ ডেজো যা বলেছিলেন তা ছাড়াও, হার্ড ড্রাইভগুলি ওয়ালকে উত্সর্গীকৃত স্টোরেজটির জন্য ঠিক আছে কারণ অ্যাক্সেস প্রায় সম্পূর্ণ
ক্রমযুক্ত

1

ধরে নিই যে আপনি লিনাক্সে চলেছেন, ডিস্ক আইও শিডিয়ুলার সেট করতে ভুলবেন না।

অতীত অভিজ্ঞতা থেকে, নুপে স্যুইচ করা আপনাকে মোটামুটি যথেষ্ট গতি দেবে (বিশেষত এসএসডি এর জন্য)।

আইও শিডিয়ুলার পরিবর্তন করে ফ্লাইতে কোনও ডাউনটাইম ছাড়াই করা যায়।

অর্থাত। প্রতিধ্বনি> </ sys / block // সারি / সময়সূচী

আরও তথ্যের জন্য দেখুন: http://www.cyberciti.biz/faq/linux- परिवर्तन-io-scheduler- for- harddisk/

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