Як отримати максимальну користь від MySQL на машині QuadCore з 16 ГБ оперативної пам’яті?


10

Я запускаю сервер MySQL 5.5 на своїй робочій станції для наукового аналізу даних і цікавлюсь, як налаштувати MySQL для того, щоб отримати максимальну ефективність від нього. Типи запитів, які я зазвичай веду, передбачають приєднання 10-20 таблиць і можуть працювати досить довго, одна-кілька хвилин взагалі не є винятком. Лише дуже мало користувачів одночасно отримують доступ до бази даних (5 - максимум). Я перемістив сервер з Lenovo Thinkpad T61 з подвійним ядром 2,2 ГГц і 4 ГБ оперативної пам’яті на наступну нову машину з вибраними вручну компонентами:

  • Intel i7 3770, 4х 3,4 ГГц (працює на 4х3,7 ГГц)
  • Чпсет Z77
  • 16 ГБ оперативної пам’яті DDR3 1600
  • 64-розрядні Windows 7 Prof
  • Windows та MySQL-сервер працюють на SSD-накопичувачі Intel 520 серії.

Перші тести (виконання однакового запиту на обох машинах) показали остаточне поліпшення швидкості для нового, але запити все-таки потребують багато часу, і я очікував, що це збільшиться. Запитання, про які йдеться, досить добре оптимізовані, тобто всі таблиці мають належний ключ, який також використовується як "розширене роз'яснення".

Тепер до моїх поточних налаштувань MySQL: Спершу слід зазначити, що я давно перейшов з MyISAM до Innodb.

Деякі мої налаштування 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

Мені хотілося б знати, чи запропонував би хтось змінити вказані вище цифри чи навіть подальші налаштування, про які я не знаю.

Буду вдячний за будь-яке корисне зауваження.

Стів

EDIT: У мене є два запити, пов’язані з приєднаннями до 10-20 таблиць, і я запускав їх у своєму ноутбуку Lenovo та новому ПК. Запит №1 отримав 3m36 на новій машині проти 9m11s на ноутбуці; Запит №2 займав 22,5 секунди на робочій станції проти 48,5 на ноутбуці. Таким чином, швидкість виконання була покращена приблизно за коефіцієнт 2-2,5. На робочій станції не використовувалося навіть 50% оперативної пам’яті. Середнє завантаження процесора на чотирьох ядрах (як повідомляє Windows Task Manager) становило лише близько 13%. Навантаження на основі ядра (як повідомляється в Core Temp) становило близько 25-40% для ONE core, тоді як воно було <= 10% для інших, що вказує на те, що MySQL не використовує декілька ядер для одного запиту .


Будь ласка, покажіть завантаження вашого сервера, тому перевірте пам’ять, io, завантаження процесора тощо

Я проведу кілька тестів і доповіду про те, що має сказати менеджер завдань Windows (або ви б порадили кращий інструмент?)

Цього має бути достатньо для першого вказівки, щоб побачити, де ваша проблема.

просто додав статистику.

2
Крім того, ви також можете спробувати майстра Percona, щоб отримати "рекомендовані" налаштування для вашого сервера баз даних за адресою tools.percona.com/wizard
Стівен Сенкомаго Мусоке

Відповіді:


5

Оскільки ви працюєте з MySQL 5.5, ви можете розглянути можливість налаштування InnoDB для доступу до декількох ядер

Ось налаштування, якими ви повинні користуватися

innodb_thread_concurrency встановлює верхню межу для кількості одночасних потоків, які InnoDB може тримати відкритими. Найкраще для цього встановити кругле число (2 X Кількість процесорів) + Кількість дисків. ОНОВЛЕННЯ : Як я дізнався з перших вуст на конференції Percona NYC, вам слід встановити це значення 0, щоб попередити InnoDB Storage Engine, щоб знайти найкращу кількість потоків для середовища, в якому він працює.

innodb_concurrency_tickets встановлює кількість потоків, які можуть безкарно обійти перевірку сумісності . Після досягнення цієї межі перевірка сумісності потоку знову стає нормою.

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

Провідний консультант MySQL пропонує майстра конфігурації MySQL . Це дозволяє налаштувати в my.cnf/my.iniзалежності від конфігурації вашої системи.

Також люди Percona випустили книгу під назвою " Високопродуктивний MySQL ". Третє видання було нещодавно випущене і висвітлює настройку дуже докладно.


це ці значення, що вони пропонують для хорошої роботи, чи це просто виплюнуло те, що я ввожу?
OpenCoderX

1

Використання пам’яті: див. Http://mysql.rjweb.org/doc.php/memory (Більшість настройок не мають значення для значення.)

max_heap_table_size = 4000М небезпечно високий! Якщо 4 користувачів потребують таких, вам не вистачає оперативної пам’яті та обміну. Обмін шкодить продуктивності набагато більше, ніж практично нічого.

Запити, що займають більше декількох секунд: їх слід вивчити для вдосконалення; будь ласка, надайте ПОКАЖИТИ СТВОРИТИ СТОЛЮ; ПОКАЗНІТЬ СТАТУТ ТАБЛИЦІ; ПОЯСНІТЬ ВИБІР


0

Ви також можете розглянути варіанти відхилення. Наприклад, PostgreSQL на FreeBSD. Але перехід з Windows на Linux підвищить вашу продуктивність.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.