स्थिति मैं एक postgresql 9.2 डेटाबेस है जो हर समय काफी भारी अद्यतन किया जाता है। प्रणाली इसलिए I / O बाध्य है, और मैं वर्तमान में एक और उन्नयन करने पर विचार कर रहा हूं, मुझे अभी कुछ दिशाओं की आवश्यकता है जहां सुधार शुरू करना है।
यहाँ एक तस्वीर है कि स्थिति पिछले 3 महीनों में कैसी दिख रही है:
जैसा कि आप देख सकते हैं, अधिकांश डिस्क उपयोग के लिए ऑपरेशन खातों को अपडेट करते हैं। यहां एक और तस्वीर है कि स्थिति अधिक विस्तृत 3 घंटे की खिड़की में कैसे दिखती है:
जैसा कि आप देख सकते हैं, चोटी लिखने की दर लगभग 20 एमबी / एस है
सॉफ़्टवेयर
सर्वर ubuntu 12.04 और postgresql 9.2 चला रहा है। अपडेट के प्रकार आमतौर पर आईडी द्वारा पहचान की गई व्यक्तिगत पंक्तियों पर छोटे अपडेट किए जाते हैं। जैसे UPDATE cars SET price=some_price, updated_at = some_time_stamp WHERE id = some_id
। मैंने जितना संभव हो सके अनुक्रमणिका को हटा दिया है और अनुकूलित कर लिया है, और सर्वर कॉन्फ़िगरेशन (दोनों लिनक्स कर्नेल और पोस्ट को कॉन्फ़िगर करता है) बहुत अच्छी तरह से अनुकूलित है।
हार्डवेयर हार्डवेयर एक समर्पित सर्वर है जिसमें 32GB ECC ram, 4x 600GB 15.000 rpm SAS एक RAID 10 सरणी में है, जिसे BBU और Intel Xeon E3-1245 Quadcore प्रोसेसर के साथ LSI छाप नियंत्रक द्वारा नियंत्रित किया जाता है।
प्रशन
- क्या इस कैलिबर की एक प्रणाली के लिए ग्राफ द्वारा देखा गया प्रदर्शन उचित है (पढ़ें / लिखते हैं)?
- इसलिए मुझे एक हार्डवेयर अपग्रेड करने पर ध्यान केंद्रित करना चाहिए या सॉफ्टवेयर में गहराई से जांच करनी चाहिए (कर्नेल ट्विकिंग, कॉन्फ, क्वेरी इत्यादि)?
- यदि हार्डवेयर अपग्रेड करते हैं, तो डिस्क की संख्या प्रदर्शन के लिए महत्वपूर्ण है?
------------------------------अपडेट करें------------------- ----------------
मैंने अब अपने डेटाबेस सर्वर को पुराने 15k एसएएस डिस्क के बजाय चार इंटेल 520 एसएसडी के साथ अपग्रेड किया है। मैं एक ही छापे नियंत्रक का उपयोग कर रहा हूँ। चीजों में काफी सुधार हुआ है, जैसा कि आप निम्न चोटी से देख सकते हैं I / O प्रदर्शन में लगभग 6-10 बार सुधार हुआ है - और यह बहुत अच्छा है! हालाँकि, मैं उत्तर के अनुसार 20-50 गुना सुधार की उम्मीद कर रहा था और नए SSDs की I / O क्षमताओं के अनुसार। तो यहाँ एक और सवाल है।
नया प्रश्न क्या मेरे मौजूदा विन्यास में कुछ है, जो मेरे सिस्टम के आई / ओ प्रदर्शन (जहां अड़चन है) को सीमित कर रहा है?
मेरे विन्यास:
/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
synchronous_commit
: 'अतुल्यकालिक प्रतिबद्ध एक विकल्प है जो लेनदेन को और अधिक तेज़ी से पूरा करने की अनुमति देता है, इस कीमत पर कि हाल ही में लेन-देन खो सकता है यदि डेटाबेस क्रैश हो जाए।'
synchronous_commit = off
पर डॉक्स पढ़ने के बाद प्रयास करें । (3)। आपका कॉन्फ़िगरेशन कैसा दिखता है? उदाहरण के लिए। इस क्वेरी के परिणाम:SELECT name, current_setting(name), source FROM pg_settings WHERE source NOT IN ('default', 'override');