Налаштуйте параметри запуску MySQL, змініть файл /etc/my.cnf Налаштуйте параметри запуску MySQL так, щоб вони набули чинності після перезапуску MySQL, після версії MySQL 4 деякі внутрішні змінні можна встановити на MySQL runtime, але вони будуть недійсними при перезапуску MySQL. Програма mysqld - Каталоги та файли basedir = path # Використовуйте заданий каталог як кореневий каталог (інсталяційний каталог). datadir = шлях # Читати файл бази даних із заданого каталогу. pid-file = ім'я файлу # Вкажіть файл для програми mysqld для зберігання ідентифікатора процесу (доступний лише для UNIX/Linux-систем);
[mysqld] socket = /tmp/mysql.sock # Визначає файл сокета для локального зв'язку між клієнтською програмою MySQL і сервером (за замовчуванням у Linux використовується файл /var/lib/mysql/mysql.sock) port=3306 # Вказує порт, для якого MsSQL прослуховує key_buffer = 384M # key_buffer — розмір буфера, що використовується для індексації блоків, що підвищує індекс, який він краще обробляє (для всіх читань і багатозапису). Індексний блок буферизований і спільний для всіх потоків, а розмір key_buffer залежить від розміру пам'яті. table_cache = 512 # Кількість відкритих таблиць для всіх потоків. Збільшення цього значення збільшує кількість файлових дескрипторів, необхідних для mysqld. Він уникає накладних витрат на часто відкриваючі таблиці даних sort_buffer_size = 2M # Виділіть буфер такого розміру для кожного потоку, який потрібно відсортувати. Збільшення цього значення прискорює операції ORDER BY або GROUP BY. Примітка: виділена пам'ять, що відповідає цьому параметру, є ексклюзивною для кожного з'єднання! Якщо є 100 підключень, то загальний розмір буфера сортування, фактично виділений, становить 100×6 = 600 МБ read_buffer_size = 2M # Розмір буфера, який може використовуватися для операції читання запиту. Як і в sort_buffer_size, виділена пам'ять, що відповідає цьому параметру, також є ексклюзивною для кожного з'єднання. query_cache_size = 32M # Визначає розмір буфера результатів запиту MySQL read_rnd_buffer_size = 8M # Змініть параметр на випадкове зчитування після сортування за допомогою вказівника рядків. myisam_sort_buffer_size =64M # Буфер, необхідний для перепорядку таблиць MyISAM при їх зміні thread_concurrency = 8 # Максимальна кількість одночасних потоків встановлюється як кількість логічних процесорів сервера ×2, і якщо процесор підтримує H.T гіперпоток, × 2 thread_cache = 8 # #缓存可重用的线程数 skip-locking # уникає зовнішнього блокування MySQL, зменшує ймовірність помилок і підвищує стабільність. [mysqldump] max_allowed_packet =16M # Максимальний можливий пакет інформації, який може бути переданий між сервером і клієнтом
[myisamchk] key_buffer = 256М sort_buffer = 256М read_buffer = 2М write_buffer = 2М
Інші опціональні параметри: back_log = 384 Вказує кількість можливих з'єднань для MySQL. Коли основний потік MySQL отримує дуже велику кількість запитів на з'єднання за дуже короткий час, цей параметр набуває чинності, і основний потік недовго перевіряє з'єднання та запускає новий потік. Значення параметра back_log показує, скільки запитів можна зберігати в стеку протягом короткого часу, перш ніж MySQL тимчасово припинить відповідати на нові запити. Якщо система має багато з'єднань за короткий час, необхідно збільшити значення цього параметра, який визначає розмір черги прослуховування для вхідних TCP/IP з'єднань. Спроба встановити ліміт, який back_log вищий за вашу операційну систему, буде неефективною. Стандартне значення — 50. Для систем Linux рекомендується встановлювати ціле число менше 512. max_connections = n Максимальна кількість підключень до бази даних, яку сервер MySQL може обробляти одночасно (налаштування за замовчуванням — 100). Якщо ліміт перевищено, буде зафіксовано помилку «Занадто багато підключень» key_buffer_size = n Значення RMA для блоків індексу (налаштування за замовчуванням 8M), збільшення індексу для кращої обробки (для всіх читань і багатозапису) record_buffer: Кожен потік, що виконує послідовне сканування, виділяє буфер такого розміру для кожної сканованої таблиці. Якщо ви робите багато послідовних сканувань, можливо, варто збільшити це значення. Значення за замовчуванням — 131072 (128K) wait_timeout: Кількість секунд, протягом яких сервер чекає дії на з'єднанні перед тим, як його вимкнути. interactive_timeout: Кількість секунд, протягом яких сервер чекає дії на інтерактивному з'єднанні перед тим, як його вимкнути. Взаємодіючий клієнт визначається як клієнт, який використовує опцію CLIENT_INTERACTIVE для mysql_real_connect(). Значення за замовчуванням — 28800, ви можете змінити його на 3600. пропустити ім'я-розв'язання Вимкніть MySQL з DNS-розв'язання на зовнішніх з'єднаннях, використання цієї опції усуває час, необхідний MySQL для розв'язання DNS. Однак слід зазначити, що якщо ця опція увімкнена, усі авторизації віддалених хостів мають використовувати метод IP-адреси, інакше MySQL не зможе обробити запит на з'єднання нормально! log-slow-queries = slow.log Записуйте повільні запити та оптимізуйте їх один за одним skip-innodb skip-bdb Закривайте небажані типи таблиць і не додавайте це, якщо потрібно
# > ПОКАЗУВАТИ ЗМІННІ НА КШТАЛТ '%query_cache%'; # > SHOW STATUS LIKE 'Qcache%'; Якщо значення Qcache_lowmem_prunes дуже велике, це свідчить про недостатнє буферизування; Якщо значення Qcache_hits дуже велике, це означає, що буфер запитів використовується дуже часто, і якщо значення невелике, але впливає на ефективність, тоді можна розглянути варіант не використовувати буферизацію запитів. Якщо значення Qcache_free_blocks дуже велике, це означає, що в буфері багато сміття.
########################################## ###### max_allowed_packet ###### ########################################## Пакет зв'язку — це одна SQL-оператор, що надсилається на MySQL сервер або одна лінія клієнту. Максимальний можливий пакет, який можна передати між сервером MySQL 5.1 і клієнтом, становить 1 ГБ. Коли клієнт MySQL або сервер mysqld отримує пакет більший за max_allowed_packet байти, виникає помилка «пакет занадто великий», і з'єднання закривається. Для деяких клієнтів, якщо пакет зв'язку занадто великий, під час запиту може виникнути помилка «Втрата з'єднання з MySQL сервером». І клієнт, і сервер мають свої max_allowed_packet змінні, тому якщо ви плануєте обробляти великі пакети, потрібно додати цю змінну і на клієнт, і на сервер. Якщо ви користуєтеся клієнтською програмою mysql, max_allowed_packet змінна за замовчуванням становить 16MB. Щоб встановити більше значення, ви можете почати mySQL наступним чином: mysql> mysql --max_allowed_packet=32M Він встановлює розмір інформаційного пакету на рівні 32 МБ. Стандартне значення max_allowed_packet для сервера — 1MB. Якщо серверу потрібно обробляти великі запити, ви можете збільшити це значення (наприклад, якщо готуєтеся до обробки великих стовпців blob). Наприклад, щоб встановити 16 МБ, можна запустити сервер таким чином: mysql> mysqld --max_allowed_packet=16M
Ви також можете використовувати файли параметрів для встановлення max_allowed_packet. Щоб встановити цю змінну для сервера на 16 МБ, додайте вміст зворотного посилання до файлу опцій: [mysqld] max_allowed_packet=16М Безпечно підвищувати значення цієї змінної, оскільки додаткова пам'ять виділяється лише за потреби. Наприклад, mysqld виділяє більше пам'яті лише якщо ви надсилаєте довгий запит або mysqld має повернути великі рядки результатів. Невелике значення за замовчуванням цієї змінної є запобіжним заходом для виявлення пакетів помилок між клієнтом і сервером, а також для того, щоб переповнення пам'яті не було спричинене випадковим використанням великих пакетів. Якщо ви використовуєте великі значення blob і не надаєте mysqld дозволу на доступ до достатньої пам'яті для обробки запитів, ви також зіткнетеся з дивними проблемами, пов'язаними з великими пакетами. Якщо підозрюєте, що це так, спробуйте збільшити ulimit -d до 256000 у скрипті mysqld_safe і перезапустити mysqld. ########################################## ##### Як відкривати та закривати таблиці баз даних у MySQL ##### ########################################## table_cache, max_connections та max_tmp_tables впливають на максимальну кількість файлів, які сервер тримає відкритими. Якщо збільшити одне або обидва ці значення, можна зіткнутися з обмеженням, яке ваша операційна система накладає на кількість файлових дескрипторів, які відкриває кожен процес. Однак ви можете збільшити ліміт на багатьох системах. Запитайте документацію вашої ОС, щоб це з'ясувати, оскільки методи зміни обмежень дуже різняться від системи до системи. table_cache пов'язане з max_connections. Наприклад, для 200 відкритих об'єднань має бути буфер таблиці щонайменше 200 * n, де n — максимальна кількість таблиць у об'єднанні. Кеш відкритих таблиць можна збільшити до максимум одного table_cache (64 за замовчуванням; Це можна зробити за допомогою mysqld -O table_cache=#选项来改变). Таблиця ніколи не закривається, окрім випадків, коли кеш заповнений і інший потік намагається відкрити таблицю, або якщо ви використовуєте mysqladmin refresh або mysqladmin flush-tables. Коли кеш таблиці заповнений, сервер використовує таку процедуру для пошуку запису кешу для використання: Таблиці, які наразі не використовуються, випускаються у порядку найменш використаних (LRU). Якщо кеш заповнений і немає таблиць для випуску, але потрібно відкрити нову таблицю, кеш має бути тимчасово збільшений. Якщо кеш перебуває у тимчасовому розширеному стані, а таблиця змінюється з активної на неактивну, вона закривається і звільняється з кешу. Відкрийте таблицю для кожного одночасного доступу. Це означає, що якщо у вас є два потоки, які отримують доступ до однієї таблиці або двічі в одному запиті (з AS), таблицю потрібно відкривати двічі. Перше відкриття будь-якої таблиці враховує 2 файлові дескриптори; Кожне додаткове використання таблиці враховує лише один дескриптор файлу. Для першого відкриття використовується додатковий дескриптор для індексації файлу; Цей опис спільний для всіх потоків
|