Коригирайте параметрите за работа на MySQL, модифицирайте файла /etc/my.cnf Настройте параметрите на работенето на MySQL да действат след рестартиране на MySQL, след версията на MySQL 4 някои вътрешни променливи могат да се зададат по време на изпълнение на MySQL, но това ще бъде невалидно при рестартиране на MySQL. MySQL Program - директории и файлове basedir = път # Използвайте дадената директория като коренна директория (инсталационна директория). datadir = път # Прочетете файла с база данни от дадена директория. pid-file = име на файл # Задайте файл за mysqld програмата за съхранение на ID на процеса (достъпен само за UNIX/Linux системи);
[mysqld] socket = /tmp/mysql.sock # Определя сокет файл за локална комуникация между MySQL клиентската програма и сървъра (по подразбиране е /var/lib/mysql/mysql.sock файл в Linux) 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 = 600MB 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 = 256M sort_buffer = 256М read_buffer = 2M write_buffer = 2M
Други опционални параметри: 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%'; # > ПОКАЗВА СТАТУС КАТО 'Qcache%'; Ако стойността на Qcache_lowmem_prunes е много голяма, това показва, че често няма достатъчно буфериране; Ако стойността на Qcache_hits е много голяма, това показва, че буферът за заявки се използва много често, и ако стойността е малка, но ще повлияе на ефективността, тогава можете да обмислите да не използвате буфериране на заявки. Ако стойността на Qcache_free_blocks е много голяма, това показва, че има много отпадъци в буфера.
########################################## ###### max_allowed_packet ###### ########################################## Комуникационният пакет е едно единствено SQL оператор, изпратено към MySQL сървъра или една линия към клиента. Максималният възможен пакет, който може да бъде изпратен между MySQL 5.1 сървъра и клиента, е 1 GB. Когато MySQL клиент или mysqld сървър получи пакет по-голям от max_allowed_packet байта, се издава грешка "пакетът е твърде голям" и връзката се затваря. За някои клиенти, ако комуникационният пакет е твърде голям, може да се появи грешката "Загуба на връзка с MySQL сървъра" по време на заявката. И клиентът, и сървърът имат свои собствени max_allowed_packet променливи, така че ако планирате да обработвате големи пакети, трябва да добавите тази променлива както на клиента, така и на сървъра. Ако използваш mysql клиентска програма, променливата max_allowed_packet по подразбиране е 16MB. За да зададете по-голяма стойност, можете да стартирате mySQL по следния начин: mysql> mysql --max_allowed_packet=32M Той задава размера на информационния пакет на 32MB. По подразбиране стойността max_allowed_packet за сървъра е 1MB. Ако сървърът трябва да обработва големи заявки, можете да увеличите тази стойност (например, ако се подготвяте да обработвате големи blob колони). Например, за да го настроите на 16MB, можете да стартирате сървъра по следния начин: mysql> mysqld --max_allowed_packet=16M
Можеш също да използваш файлове с опции, за да зададеш max_allowed_packet. За да зададете тази променлива за сървъра на 16MB, добавете съдържание за спускане към файла с опции: [mysqld] max_allowed_packet=16M Безопасно е да се увеличи стойността на тази променлива, защото допълнителна памет се отделя само когато е необходимо. Например, 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 по подразбиране; Това може да се направи с -O на mysqld table_cache=#选项来改变). Таблица никога не се затваря, освен когато кешът е пълен и друга нишка се опитва да отвори таблица или ако използвате mysqladmin refresh или mysqladmin flush-tables. Когато кешът на таблицата е пълен, сървърът използва следната процедура, за да намери запис в кеша за използване: Таблиците, които в момента не се използват, се публикуват в реда на най-малко използвани (LRU). Ако кешът е пълен и няма таблици за освобождаване, но трябва да се отвори нова таблица, кешът трябва временно да се увеличи. Ако кешът е в временно разширено състояние и таблицата се промени от активна на неактивна, тя се затваря и освобождава от кеша. Отворете таблица за всеки едновременен достъп. Това означава, че ако имате две нишки, които достъпват една и съща таблица или я достъпват два пъти в една и съща заявка (с AS), таблицата трябва да бъде отворена два пъти. Първото отваряне на всяка таблица отчита 2 файлови дескриптора; Всяко допълнително използване на таблицата отчита само един файлов дескриптор. За първото отваряне се използва допълнителен дескриптор за индексиране на файла; Това описание е споделено за всички нишки
|