कुछ दिनों पहले हमने पोस्टग्रेएसक्यूएल के लिए एक पूरी तरह से ओपन-सोर्स लॉजिकल प्रतिकृति समाधान, पीजीलॉजिकल जारी किया था, जो उम्मीद है कि बहुत दूर भविष्य में पोस्टग्रेएसक्यूएल पेड़ में शामिल हो जाएगा। मैं तार्किक प्रतिकृति द्वारा सक्षम सभी चीजों के बारे में चर्चा नहीं करने जा रहा हूँ - pglogic रिलीज़ घोषणा काफी अच्छा अवलोकन प्रस्तुत करती है, और साइमन ने कुछ दिनों पहले एक अन्य पोस्ट में तार्किक प्रतिकृति के लाभों को भी संक्षेप में समझाया।
इसके बजाय मैं घोषणा में उल्लिखित एक विशेष पहलू के बारे में बात करना चाहता हूं - मौजूदा समाधानों के साथ प्रदर्शन की तुलना। pglogic पेज में उल्लेख है
बेंचमार्क
यह पोस्ट अधिकतम "टिकाऊ" थ्रूपुट (लेन-देन प्रति सेकंड) खोजने के लिए हमारे द्वारा किए गए बेंचमार्क के विवरण की व्याख्या करता है, प्रत्येक समाधान बिना अंतराल के संभाल सकता है। ऐसा करने के लिए मैंने ग्राहकों की अलग-अलग संख्या के साथ i2.4xlarge AWS इंस्टेंस की एक जोड़ी पर कई pgbench परीक्षण चलाए हैं, और मास्टर पर थ्रूपुट को मापने और इसे पकड़ने में कितना समय लगा (यदि यह पिछड़ रहा था) . इसके बाद परिणामों का उपयोग स्टैंडबाय नोड पर अधिकतम थ्रूपुट के अनुमान की गणना करने के लिए किया गया था।
उदाहरण के लिए मान लें कि हम 30 मिनट के लिए 16 क्लाइंट के साथ pgbench चला रहे हैं, और हमने मास्टर पर 10000 tps मापा है, लेकिन स्टैंडबाय पिछड़ रहा था और पकड़ने में 15 मिनट का समय लगा। तब अधिकतम टिकाऊ थ्रूपुट अनुमान है
tps =(लेन-देन निष्पादित) / (स्टैंडबाय पकड़े जाने तक कुल रनटाइम)
यानी
टीपीएस =(30 60 1.000) / (45 * 60) =18.000,000 / 2.700 =6.666
तो उस स्थिति में स्टैंडबाय पर अधिकतम टिकाऊ थ्रूपुट 6.666 टीपीएस है, यानी मास्टर पर मापी गई लेनदेन दर का केवल ~66%।
सिस्टम
बेंचमार्क i2.4xlarge AWS इंस्टेंस की एक जोड़ी पर किया गया था, एक ही प्लेसमेंट समूह में कॉन्फ़िगर किया गया था (इसलिए उनके बीच ~ 2Gbit नेटवर्क कनेक्शन के साथ), और 4x SSD ड्राइव RAID-0 में कॉन्फ़िगर किया गया था (इसलिए I/O एक होने की संभावना नहीं है यहाँ समस्या)। उदाहरणों में ~ 122GB RAM है, इसलिए डेटा सेट (पैमाने पर 5000 के साथ pgbench) RAM में फिट बैठता है। सभी परीक्षण PostgreSQL 9.5.0 पर बिल्कुल समान कॉन्फ़िगरेशन के साथ किए गए:
checkpoint_timeout = 15min
effective_io_concurrency = 32
maintenance_work_mem = 1GB
max_wal_size = 8GB
min_wal_size = 2GB
shared_buffers = 16GB
सभी प्रतिकृति प्रणालियों के लिए, नवीनतम उपलब्ध संस्करण का उपयोग किया गया था, विशेष रूप से
- slony1 2.2.4
- स्काईटूल 3.2
और ट्यूटोरियल में वर्णित के रूप में एक साधारण प्रतिकृति स्थापित की गई थी (दोनों बेंचमार्क के लिए उपयोग किए गए pgbench उदाहरण का उपयोग करते हैं)।
परिणाम
आगे प्रस्तुत परिणामों में स्ट्रीमिंग प्रतिकृति (एसिंक्रोनस मोड) भी शामिल है ताकि आपको तार्किक प्रतिकृति से जुड़े ओवरहेड का बेहतर विचार मिल सके। लेन-देन दरें pgbench द्वारा मापी गई "कच्ची" संख्याएं नहीं हैं, बल्कि इस पोस्ट की शुरुआत में प्रस्तुत किए गए सूत्र का उपयोग करके गणना की गई "टिकाऊ" दरें हैं।
ग्राहक | स्ट्रीमिंग | pgological | बेवकूफ | लोंडिस्टे |
---|---|---|---|---|
1 | 1075 | 1052 | 949 | 861 |
2 | 2118 | 2048 | 1806 | 1657 |
4 | 3894 | 3820 | 3456 | 1643 |
8 | 6506 | 6442 | 2040 | 1645 |
16 | 9570 | 8251 | 1535 | 1635 |
24 | 11388 | 7728 | 1548 | 1622 |
32 | 12384 | 7818 | 1358 | 1623 |