बेंचमार्किंग आपके बुनियादी ढांचे के प्रदर्शन की खोज करने का एक तरीका है। Sysbench PostgreSQL सर्वर को बेंचमार्क करने के लिए एक बेहतरीन टूल है। इस ब्लॉग पोस्ट में, हम आपको दिखाएंगे कि sysbench का उपयोग करके टेस्ट लोड कैसे उत्पन्न करें। हम क्लस्टरकंट्रोल द्वारा दो-नोड मास्टर-स्लेव स्ट्रीमिंग प्रतिकृति सेटअप का उपयोग करेंगे। यह हमें क्लस्टर पर कुछ गतिविधि उत्पन्न करने में भी मदद करेगा, और जाँच करेगा कि प्रतिकृति अपेक्षा के अनुरूप काम कर रही है।
हम sysbench का नवीनतम संस्करण स्थापित करेंगे, जो वर्तमान में यहां अनुरक्षित है। हम sysbench को स्थापित करने के लिए आधिकारिक Github पृष्ठ में दिए गए अधिक अद्यतन पैकेज का उपयोग करेंगे। हम PostgreSQL डाउनलोड पेज से मानक PostgreSQL 9.6 बायनेरिज़ का भी उपयोग करेंगे। ध्यान दें कि आपके द्वारा इंस्टॉल किए गए PostgreSQL संस्करण और विक्रेता के आधार पर इस ब्लॉग पोस्ट में उपयोग किया गया पथ भिन्न हो सकता है।
एक साइड नोट के रूप में, हमने इस ब्लॉग पोस्ट, हाउ टू बेंचमार्क पोस्टग्रेएसक्यूएल परफॉर्मेंस में पीजीबेंच का उपयोग करके पोस्टग्रेएसक्यूएल बेंचमार्किंग पर एक समान ब्लॉग पोस्ट को कवर किया है।
सिसबेंच इंस्टाल करना
सिसबेंच स्थापित करना आसान है। डेबियन/उबंटू के लिए:
$ curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.deb.sh | sudo bash
$ sudo apt -y install sysbench
और आरएचईएल/सेंटोस के लिए:
$ curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash
$ sudo yum -y install sysbench
सिसबेंच पैकेज स्थापित करें:
$ yum install sysbench
संस्करण सत्यापित करें:
$ sysbench --version
sysbench 1.0.15
हमने अब sysbench स्थापित कर लिया है।
परीक्षण डेटा प्रारंभ करना
यदि आप sysbench से परिचित हैं, तो यह PostgreSQL पैरामीटर के लिए निम्नलिखित डिफ़ॉल्ट का उपयोग करता है:
- pgsql-host=localhost
- pgsql-port=5432
- pgsql-user=sbtest
- pgsql-password=password
- pgsql-db=sbtest
सबसे पहले, PostgreSQL के अंदर डेटाबेस और उपयोगकर्ता बनाएं:
$ su - postgres
$ psql
> CREATE USER sbtest WITH PASSWORD 'password';
> CREATE DATABASE sbtest;
> GRANT ALL PRIVILEGES ON DATABASE sbtest TO sbtest;
फिर होस्ट-आधारित एक्सेस फ़ाइल को संपादित करें, pg_hba.conf :
$ vim /var/lib/pgsql/9.6/data/pg_hba.conf
और 192.168.55.0 नेटवर्क के अंतर्गत सभी होस्टों से डेटाबेस sbtest के लिए उपयोगकर्ता sbtest के लिए कनेक्शन की अनुमति देने के लिए निम्न पंक्ति जोड़ें:
host sbtest sbtest 192.168.55.0/24 md5
परिवर्तन लागू करने के लिए सर्वर को पुनः लोड करें:
$ /usr/pgsql-9.6/bin/pg_ctl --reload
यदि उपयोगकर्ता प्रमाणीकरण सही ढंग से काम करता है, तो psql कमांड लाइन क्लाइंट से सत्यापित करें:
$ psql -U sbtest -h 192.168.55.61 -p 5432 -d sbtest -W
आपको sbtest डेटाबेस के अंतर्गत सर्वर में प्रवेश करने में सक्षम होना चाहिए:
$ psql -U sbtest -h 192.168.55.61 -p 5432 -W
Password for user sbtest:
Type "help" for help.
sbtest=>
टर्मिनल से बाहर निकलने के लिए "\q" चलाएँ। अब हम निम्नलिखित कमांड के साथ sysbench का उपयोग करके डेटाबेस को इनिशियलाइज़ कर सकते हैं:
$ sysbench \
--db-driver=pgsql \
--oltp-table-size=100000 \
--oltp-tables-count=24 \
--threads=1 \
--pgsql-host=192.168.55.61 \
--pgsql-port=5432 \
--pgsql-user=sbtest \
--pgsql-password=password \
--pgsql-db=sbtest \
/usr/share/sysbench/tests/include/oltp_legacy/parallel_prepare.lua \
run
उपरोक्त आदेश डेटाबेस 'sbtest' के अंदर 24 टेबल (sbtest1 से sbtest24) के लिए प्रति तालिका 100,000 पंक्तियां उत्पन्न करता है। स्कीमा नाम "सार्वजनिक" है जो डिफ़ॉल्ट है। डेटा parallel_prepare.lua . नामक एक स्क्रिप्ट द्वारा तैयार किया जाता है जो /usr/share/sysbench/tests/include/oltp_legacy के अंतर्गत उपलब्ध है।
निम्न आदेश के साथ उत्पन्न तालिकाओं को सत्यापित करें:
$ psql -U sbtest -h 192.168.55.61 -p 5432 -W -c '\dt+\'
Password for user sbtest:
List of relations
Schema | Name | Type | Owner | Size | Description
--------+----------+-------+--------+-------+-------------
public | sbtest1 | table | sbtest | 21 MB |
public | sbtest10 | table | sbtest | 21 MB |
public | sbtest11 | table | sbtest | 21 MB |
public | sbtest12 | table | sbtest | 21 MB |
public | sbtest13 | table | sbtest | 21 MB |
public | sbtest14 | table | sbtest | 21 MB |
public | sbtest15 | table | sbtest | 21 MB |
public | sbtest16 | table | sbtest | 21 MB |
public | sbtest17 | table | sbtest | 21 MB |
public | sbtest18 | table | sbtest | 21 MB |
public | sbtest19 | table | sbtest | 21 MB |
public | sbtest2 | table | sbtest | 21 MB |
public | sbtest20 | table | sbtest | 21 MB |
public | sbtest21 | table | sbtest | 21 MB |
public | sbtest22 | table | sbtest | 21 MB |
public | sbtest23 | table | sbtest | 21 MB |
public | sbtest24 | table | sbtest | 21 MB |
public | sbtest3 | table | sbtest | 21 MB |
public | sbtest4 | table | sbtest | 21 MB |
public | sbtest5 | table | sbtest | 21 MB |
public | sbtest6 | table | sbtest | 21 MB |
public | sbtest7 | table | sbtest | 21 MB |
public | sbtest8 | table | sbtest | 21 MB |
public | sbtest9 | table | sbtest | 21 MB |
(24 rows)
परीक्षण डेटा अब लोड हो गया है।
आज श्वेतपत्र डाउनलोड करें क्लस्टरकंट्रोल के साथ पोस्टग्रेएसक्यूएल प्रबंधन और स्वचालन इस बारे में जानें कि पोस्टग्रेएसक्यूएल को तैनात करने, मॉनिटर करने, प्रबंधित करने और स्केल करने के लिए आपको क्या जानना चाहिए। श्वेतपत्र डाउनलोड करेंटेस्ट लोड जेनरेट करें
आप sysbench के साथ विभिन्न प्रकार के डेटाबेस वर्कलोड कर सकते हैं, जैसा कि निम्नलिखित अनुभागों में दिखाया गया है।
लोड पढ़ें/लिखें
आदेश MySQL के sysbench के संस्करण के समान है। PostgreSQL संबंधित मापदंडों को छोड़कर समान मापदंडों का उपयोग किया जा सकता है:
$ sysbench \
--db-driver=pgsql \
--report-interval=2 \
--oltp-table-size=100000 \
--oltp-tables-count=24 \
--threads=64 \
--time=60 \
--pgsql-host=192.168.55.61 \
--pgsql-port=5432 \
--pgsql-user=sbtest \
--pgsql-password=password \
--pgsql-db=sbtest \
/usr/share/sysbench/tests/include/oltp_legacy/oltp.lua \
run
उपरोक्त कमांड LUA स्क्रिप्ट से /usr/share/sysbench/tests/include/oltp_legacy/oltp.lua नामक LUA स्क्रिप्ट से OLTP वर्कलोड जनरेट करेगा, मेजबान 192.168.55.61 (मास्टर पर 60 सेकंड के लिए 64 वर्कर थ्रेड्स के साथ 24 टेबल की 100,000 पंक्तियों के खिलाफ) ) हर 2 सेकंड में, sysbench मध्यवर्ती आँकड़ों की रिपोर्ट करेगा (--report-interval=2 )।
एक बार निष्पादित होने के बाद, आपको नीचे जैसा कुछ मिलेगा:
sysbench 1.0.15 (using bundled LuaJIT 2.1.0-beta2)
Running the test with following options:
Number of threads: 16
Report intermediate results every 2 second(s)
Initializing random number generator from current time
Initializing worker threads...
Threads started!
[ 2s ] thds: 64 tps: 0.00 qps: 466.69 (r/w/o: 406.55/28.33/31.81) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00
[ 4s ] thds: 64 tps: 30.55 qps: 525.38 (r/w/o: 335.56/128.72/61.10) lat (ms,95%): 3639.94 err/s: 0.00 reconn/s: 0.00
[ 6s ] thds: 64 tps: 39.55 qps: 718.41 (r/w/o: 496.13/142.68/79.60) lat (ms,95%): 4128.91 err/s: 0.00 reconn/s: 0.00
[ 8s ] thds: 64 tps: 35.98 qps: 840.95 (r/w/o: 604.11/163.89/72.95) lat (ms,95%): 2198.52 err/s: 0.50 reconn/s: 0.00
[ 10s ] thds: 64 tps: 65.57 qps: 1314.94 (r/w/o: 912.00/271.80/131.14) lat (ms,95%): 3040.14 err/s: 0.00 reconn/s: 0.00
...
जब परीक्षण चल रहा था, हम pg_activity . का उपयोग करके PostgreSQL गतिविधि की निगरानी कर सकते हैं या pg_top , sysbench द्वारा रिपोर्ट किए गए मध्यवर्ती आंकड़ों की पुष्टि करने के लिए। दूसरे टर्मिनल में, करें:
$ su - postgres
$ pg_activity
PostgreSQL 9.6.9 - postgres1.local - [email protected]:5432/postgres - Ref.: 2s
Size: 654.62M - 7.67K/s | TPS: 74
Mem.: 39.10% - 382.72M/979.68M | IO Max: 3395/s
Swap: 0.20% - 3.57M/2.00G | Read : 8.36M/s - 2141/s
Load: 20.20 6.02 2.44 | Write: 2.54M/s - 650/s
RUNNING QUERIES
PID DATABASE USER CLIENT CPU% MEM% READ/s WRITE/s TIME+ W IOW state Query
5130 sbtest sbtest 192.168.55.61 1.0 2.8 791.57K 3.84K 0.788732 N N active SELECT c FROM sbtest7 WHERE id BETWEEN 33195
AND 33294
...
साथ ही साथ प्रतिकृति स्ट्रीम pg_stat_replication . को देखकर मास्टर सर्वर पर टेबल:
$ su - postgres
$ watch -n1 'psql -xc "select * from pg_stat_replication"'
Every 1.0s: psql -xc "select * from pg_stat_replication" Tue Jul 31 13:12:08 2018
-[ RECORD 1 ]----+------------------------------
pid | 3792
usesysid | 16448
usename | slave
application_name | walreceiver
client_addr | 192.168.55.62
client_hostname |
client_port | 44654
backend_start | 2018-07-30 13:41:41.707514+08
backend_xmin |
state | streaming
sent_location | 0/60933D78
write_location | 0/60933D78
flush_location | 0/60933D78
replay_location | 0/60933D78
sync_priority | 0
sync_state | async
उपरोक्त "घड़ी" कमांड हर 1 सेकंड में psql कमांड चलाता है। प्रतिकृति होने पर आपको "*_location" कॉलम को तदनुसार अपडेट होते देखना चाहिए।
परीक्षण के अंत में, आपको सारांश देखना चाहिए:
SQL statistics:
queries performed:
read: 67704
write: 19322
other: 9682
total: 96708
transactions: 4830 (79.34 per sec.)
queries: 96708 (1588.53 per sec.)
ignored errors: 6 (0.10 per sec.)
reconnects: 0 (0.00 per sec.)
General statistics:
total time: 60.8723s
total number of events: 4830
Latency (ms):
min: 4.52
avg: 799.70
max: 8082.70
95th percentile: 2279.14
sum: 3862532.62
Threads fairness:
events (avg/stddev): 75.4688/7.39
execution time (avg/stddev): 60.3521/0.20
उपरोक्त सारांश हमें बताता है कि हमारा PostgreSQL डेटाबेस सर्वर 64 वर्कर थ्रेड्स के तहत औसतन प्रति सेकंड लगभग 80 लेनदेन और प्रति सेकंड लगभग 1588 प्रश्नों को संभाल सकता है।
रीड-ओनली लोड
केवल-पढ़ने के लिए परीक्षण के लिए, आप उसी कमांड का उपयोग कर सकते हैं, लेकिन LUA स्क्रिप्ट को select.lua में बदल सकते हैं। , select_random_points.lua , select_random_ranges.lua या oltp_simple.lua :
$ sysbench \
--db-driver=pgsql \
--report-interval=2 \
--oltp-table-size=100000 \
--oltp-tables-count=24 \
--threads=64 \
--time=60 \
--pgsql-host=192.168.55.62 \
--pgsql-port=5432 \
--pgsql-user=sbtest \
--pgsql-password=password \
--pgsql-db=sbtest \
/usr/share/sysbench/tests/include/oltp_legacy/select.lua \
run
उपरोक्त आदेश केवल पढ़ने के लिए कार्यभार चलाता है जिसे select.lua . कहा जाता है पोस्टग्रेएसक्यूएल स्लेव सर्वर (स्ट्रीमिंग प्रतिकृति) के विरुद्ध, 192.168.55.62 64 वर्कर थ्रेड्स के साथ।
अन्य भार
कई अन्य OLTP कार्यभार हैं जिन्हें आप sysbench के साथ उत्पन्न कर सकते हैं, जैसा कि इस निर्देशिका के अंतर्गत सूचीबद्ध है, /usr/share/sysbench/tests/include/oltp_legacy :
$ ls -1 /usr/share/sysbench/tests/include/oltp_legacy/
bulk_insert.lua
common.lua
delete.lua
insert.lua
oltp.lua
oltp_simple.lua
parallel_prepare.lua
select.lua
select_random_points.lua
select_random_ranges.lua
update_index.lua
update_non_index.lua
आप समान कमांड का उपयोग कर सकते हैं और इसे लोड करने के लिए LUA स्क्रिप्ट का पथ बदल सकते हैं।
अंतिम विचार
sysbench का उपयोग करके, हम अपने PostgreSQL सर्वर (साथ ही MySQL के लिए) के लिए परीक्षण भार उत्पन्न कर सकते हैं। ध्यान दें कि सबसे अच्छा बेंचमार्क आपके वास्तविक डेटा और एप्लिकेशन के साथ होगा, लेकिन यह हमेशा संभव नहीं हो सकता है। यह एक नया एप्लिकेशन भी हो सकता है जो जल्दी से विकसित होगा। हो सकता है कि sysbench द्वारा उत्पन्न लोड आपके वास्तविक-विश्व OLTP कार्यभार को न दर्शाए, लेकिन यह काफी अच्छा हो सकता है।