मैं वैज्ञानिक डेटा विश्लेषण के लिए अपने कार्य केंद्र पर MySQL 5.5 सर्वर चला रहा हूं और आश्चर्य करता हूं कि प्रदर्शन-वार का सबसे अधिक लाभ उठाने के लिए MySQL को कैसे कॉन्फ़िगर किया जाए। क्वेरी के प्रकार जो मैं आमतौर पर 10-20 तालिकाओं के जोड़ से चलाता हूं और काफी लंबे समय तक चल सकता है, एक से कई मिनट तक कोई अपवाद नहीं है। केवल बहुत कम उपयोगकर्ता एक ही समय में डेटाबेस तक पहुँचते हैं (5 अधिकतम)। मैंने लेनोवो थिंकपैड T61 से सर्वर को 2.2-गीगाहर्ट्ज डुअल कोर और 4 जीबी रैम के साथ हाथ से चयनित घटकों के साथ निम्नलिखित ब्रांड-नई मशीन में स्थानांतरित किया:
- Intel i7 3770, 4x 3.4 GHz (@ 4x3.7 GHz चल रहा है)
- Z77 चिपसेट
- 16 जीबी की डीडीआर 3 1600 रैम
- विंडोज 7 प्रो 64-बिट
- विंडोज और MySQL सर्वर एक इंटेल 520 श्रृंखला SSD ड्राइव पर चलते हैं।
पहले परीक्षणों (दोनों मशीनों पर एक ही क्वेरी चलाने) ने नए के लिए गति में एक निश्चित सुधार दिखाया, लेकिन अभी भी प्रश्नों में बहुत समय लगता है और मुझे अधिक बढ़ावा मिलने की उम्मीद थी। प्रश्न में प्रश्नों को काफी अच्छी तरह से अनुकूलित किया गया है, अर्थात सभी तालिकाओं में उचित कुंजी है जो कि "एक्सटेंडेड एक्सटेंडेड" के रूप में भी उपयोग की जा रही हैं।
अब मेरी वर्तमान MySQL सेटिंग्स पर: पहले मुझे यह उल्लेख करना चाहिए कि मैं बहुत समय पहले MyISAM से इनोडब में चला गया था।
मेरे कुछ my.ini ट्विक्स (यानी डिफ़ॉल्ट सेटिंग से प्रस्थान):
# Maximum size for internal (in-memory) temporary tables. If a table
# grows larger than this value, it is automatically converted to disk
# based table This limitation is for a single table. There can be many
# of them.
#tmp_table_size=35M
tmp_table_size=4000M
max_heap_table_size=4000M
# InnoDB, unlike MyISAM, uses a buffer pool to cache both indexes and
# row data. The bigger you set this the less disk I/O is needed to
# access data in tables. On a dedicated database server you may set this
# parameter up to 80% of the machine physical memory size. Do not set it
# too large, though, because competition of the physical memory may
# cause paging in the operating system. Note that on 32bit systems you
# might be limited to 2-3.5G of user level memory per process, so do not
# set it too high.
#innodb_buffer_pool_size=96M
innodb_buffer_pool_size=800M
general-log
expire_logs_days = 60
general_log_file = "F:/my_query_mysql.log"
log-output = TABLE
optimizer_search_depth = 0 #meant to cure the "statistics state" bug in some queries
मैं यह जानना चाहूंगा कि क्या कोई व्यक्ति उपरोक्त संख्याओं में बदलाव करने का सुझाव देगा या आगे की सेटिंग्स भी जो मुझे नहीं पता है।
मैं किसी भी उपयोगी टिप्पणी की सराहना करता हूँ।
स्टीव
संपादित करें: मेरे पास दो प्रश्न हैं जो 10-20 टेबलों पर जुड़ते हैं और उन्हें अपने लेनोवो नोटबुक और नए पीसी पर चलाते हैं। लैपटॉप पर नई मशीन बनाम 9m11s पर क्वेरी # 1 ने 3m36s लिया; क्वेरी # 2 ने लैपटॉप पर वर्कस्टेशन बनाम 48.5 एस पर 22.5 एस लिया। इसलिए निष्पादन की गति लगभग 2-2.5 के कारक से सुधरी थी। वर्कस्टेशन पर, 50% रैम का भी उपयोग नहीं किया गया था। चार कोर (विंडोज टास्क मैनेजर द्वारा रिपोर्ट किए गए) के अनुसार औसत सीपीयू लोड केवल 13% था। प्रति-कोर आधार पर लोड (जैसा कि कोर टेम्प द्वारा रिपोर्ट किया गया) वन कोर के लिए लगभग 25-40% था, जबकि यह दूसरों के लिए <= 10% था, यह दर्शाता है कि MySQL एक क्वेरी के लिए एकाधिक कोर का उपयोग नहीं करता है। ।