Spero che qualcuno possa essere in grado di offrire assistenza per l'ottimizzazione di un file my.cnf per un server di database mysql ad altissimo volume.Consigli per l'ottimizzazione delle prestazioni MySQL my.cnf
Our architecture is as follows:
Memory : 96GB
CPUs : 12
OS & Mysql : 64-bit
Disk Space : 1.2 TB
DB Engine : MyISAM
La nostra applicazione Web viene utilizzata da circa 300 client contemporaneamente. Abbiamo bisogno del nostro my.cnf sintonizzato per fornire le migliori prestazioni possibili per questa infrastruttura.
Sono perfettamente consapevole che gli indici e le query ottimizzate sono un fattore importante in questo, ma vorremmo iniziare con un sistema che sia configurato correttamente e quindi procedere con la reingegnerizzazione sistematica delle nostre query di conseguenza.
Here is our current my.cnf file content:
[mysqld]
datadir=/home/mysql
socket=/home/mysql/mysql.sock
user=mysql
log-bin=mysql-bin
server-id=1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=1
log-slow-queries = /var/log/mysqld_slow_queries.log
long_query_time = 10
max_connections = 500
key_buffer_size = 32768M
#max_allowed_packet = 2M
#table_open_cache = 128
#sort_buffer_size = 1024K
#net_buffer_length = 64K
#read_buffer_size = 1024K
#read_rnd_buffer_size = 1024K
#myisam_sort_buffer_size = 8M
query_cache_size = 128M
query_cache_limit = 128M
interactive_timeout = 300
wait_timeout = 300
# Added values after load testing
thread_cache_size = 8
#tmp_table_size = 256M
#max_heap_table_size = 256M
#table_cache = 512
#join_buffer_size = 512
log-error=/var/log/mysqld.log
innodb_buffer_pool_size=128M
#innodb_file_per_table
#innodb_log_file_size=250M
##innodb_buffer_pool_size=64M
#innodb_buffer_pool_size=1024M
#innodb_log_buffer_size=4M
##log-bin=mysql-bin
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
#[myisamchk]
#key_buffer = 64M
#sort_buffer = 64M
#read_buffer = 16M
#write_buffer = 16M
Qualche suggerimento? Grazie gente.
Edit by RolandoMySQLDBA
Poiché tutti i dati che si è MyISAM, si prega di eseguire questa query e mostrare l'uscita
SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1))
recommended_key_buffer_size FROM
(SELECT LEAST(POWER(2,32),KBS1) KBS
FROM (SELECT SUM(index_length) KBS1
FROM information_schema.tables
WHERE engine='MyISAM' AND
table_schema NOT IN ('information_schema','mysql')) AA) A,
(SELECT 3 PowerOf1024) B;
@ Rolando - Grazie ... i risultati di quella query era 4G.
Stai vivendo la lentezza specifica sulla base delle impostazioni correnti? – Randy
Questa è una buona macchina per soli 300 utenti web, anche di più se si tratta solo di un server DB. È Windows o Linux? In entrambi i casi, generalmente raccomando di avere dischi/LUN separati per OS/Swap e il volume di dati (dove risiede il datadir). Stai lontano dal raid del software, ecc. C'è uno strumento chiamato 'mk-query-advisor' che potrebbe aiutarti a mettere a punto questa configurazione. A meno che l'applicazione 'front-end' non faccia la 'cosa giusta' (memorizzazione dei dati statici nella cache, solo query quando necessario, ecc.), L'ottimizzazione potrebbe non farti guadagnare molto. – JMC
È anche possibile aggiungere uno script di manutenzione (dopo un backup ovviamente) che chiama "OPTIMIZE TABLE tbl_name" ogni settimana per aiutare a mantenere le cose ottimizzate. Anche esaminando partizionare tabelle di grandi dimensioni, ecc. – JMC