16 जीबी रैम के साथ क्वाडकोर मशीन पर MySQL से सबसे अधिक कैसे प्राप्त करें?


10

मैं वैज्ञानिक डेटा विश्लेषण के लिए अपने कार्य केंद्र पर 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 एक क्वेरी के लिए एकाधिक कोर का उपयोग नहीं करता है। ।


कृपया अपना सर्वर लोड दिखाएं, इसलिए मेमोरी, आईओ, सीपीयू लोड आदि की जांच करें

मैं कुछ परीक्षण

यह देखने के लिए पहले संकेत के लिए पर्याप्त होना चाहिए कि आपका मुद्दा कहां है।

बस कुछ आँकड़े जोड़े।

2
इसके अलावा आप Percona विज़ार्ड को अपने डेटाबेस सर्वर के लिए "अनुशंसित" सेटिंग टूल
स्टीफन सेनकोमगो मूस जूल

जवाबों:


5

जब से आप MySQL 5.5 चला रहे हैं, आप कई कोर तक पहुँचने के लिए InnoDB को कॉन्फ़िगर करने पर विचार कर सकते हैं

यहां वे सेटिंग हैं जिनका आपको उपयोग करना चाहिए

innodb_thread_concurrency ऊपरी समवर्ती धागों की संख्या पर ऊपरी सीमा निर्धारित करता है जिसे InnoDB खुला रख सकता है। इसके लिए सेट करने के लिए सबसे अच्छा राउंड नंबर है (2 X नंबर ऑफ सीपीयू) + डिस्क की संख्या। अद्यतन : जैसा कि मैंने पेरकोना एनवाईसी कॉन्फ्रेंस से पहली बार सीखा है, आपको इनोबीडी स्टोरेज इंजन को अलर्ट करने के लिए इसे 0 पर सेट करना चाहिए ताकि जिस पर्यावरण में यह चल रहा है उसके लिए सबसे अच्छी संख्या में थ्रेड मिलें।

innodb_concurrency_ticket ऐसे थ्रेड्स की संख्या सेट करता है जो इंप्यूनिटी के साथ कंसीडर चेकिंग को बायपास कर सकते हैं। उस सीमा तक पहुँच जाने के बाद, थ्रेड कंसिस्टेंसी जाँच फिर से आदर्श बन जाती है।

innodb_commit_concurrency समवर्ती लेनदेन की संख्या निर्धारित करता है जिसे प्रतिबद्ध किया जा सकता है। चूंकि डिफॉल्ट 0 है, इसलिए इसे सेट न करना किसी भी तरह के लेनदेन को एक साथ करने की अनुमति देता है।

innodb_thread_sleep_delay , एक InnoDB धागे की संख्या को निर्धारित करता है जो InnoDB कतार को पुन: दर्ज करने से पहले निष्क्रिय हो सकता है। डिफ़ॉल्ट 10000 (10 सेकंड) है।

innodb_read_io_threads और innodb_write_io_threads (दोनों MySQL 5.1.38 के बाद से) रीड और राइट के लिए निर्दिष्ट थ्रेड की संख्या आवंटित करते हैं। डिफ़ॉल्ट 4 है और अधिकतम 64 है।

innodb_replication_delay एक दास पर धागा विलंब लगाता है innodb_thread_concurrency पहुँच गया है।

यहाँ MySQL 5.5 पर मेरी पिछली पोस्ट हैं और InnoDB के लिए कई कोर सक्रिय किए जा रहे हैं


2

Percona- अग्रणी MySQL सलाहकार एक MySQL कॉन्फ़िगरेशन विज़ार्ड प्रदान करता है । यह आपको my.cnf/my.iniअपने सिस्टम कॉन्फ़िगरेशन के आधार पर कॉन्फ़िगर करने देता है।

साथ ही पेरकोना के लोगों ने " हाई परफॉरमेंस MySQL " नामक एक पुस्तक जारी की है । तीसरा संस्करण हाल ही में जारी किया गया था, और महान विस्तार में ट्यूनिंग को शामिल किया गया।


क्या ये मूल्य हैं जो वे अच्छे प्रदर्शन के लिए सुझाव देते हैं, या क्या मैं जो भी दर्ज करता हूं उसे थूकता हूं?
OpenCoderX

1

मेमोरी उपयोग: http://mysql.rjweb.org/doc.php/memory देखें (अधिकांश ट्यूनल्स के मामले में पर्याप्त अंतर नहीं होगा।)

max_heap_table_size = 4000M खतरनाक रूप से उच्च है! यदि 4 उपयोगकर्ताओं को ऐसी आवश्यकता है, तो आप रैम और स्वैपिंग से बाहर हैं। स्वैपिंग वस्तुतः किसी भी चीज़ की तुलना में प्रदर्शन को अधिक प्रभावित करता है।

कुछ सेकंड से अधिक समय लेने वाली क्वेरी: उन्हें सुधार के लिए अध्ययन किया जाना चाहिए; कृपया कम उत्पादन तालिका प्रदान करें; शोबल स्थिति; का चयन करें


0

आप ओगर विकल्पों पर भी विचार कर सकते हैं। जैसे FreeBSD पर PostgreSQL। लेकिन विंडोज से लिनक्स पर स्वाइप करने से आपको परफॉर्मेंस में खलल पड़ेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.