Sta sintonizzando l'INNODB_BUFFER_POL_SIZE IMPORTANTE SU SOLARIS ZFS?
Domanda
Stiamo eseguendo un database di dimensioni moderate (350 GB) con alcune tabelle abbastanza grandi (alcune centinaia di righe, 50 GB) su un server ragionevolmente ampio (2 x Xeons quad-core, 24 GB di RAM, 2,5 "dischi 10K in RAID10) e stanno ottenendo alcuni inserti piuttosto lenti (ad es. Inserto semplice di una singola riga che prende 90 secondi!).
Il nostro InnoDb_Buffer_Pool_SIze è impostato su 400 MB, che sarà normalmente troppo basso per questo tipo di installazione.Tuttavia, il nostro fornitore di hosting consiglia che questo è irrilevante quando si corre su ZFS.Ha ragione?
(scuse per il doppio post su https://dba.stackexchange.com/questions/1975/is-Tuning-the-innodb-Buffer-Pool-Size-Important-on-Solaris-zfs , ma non sono sicuro di quanto grandeIl pubblico è laggiù!)
Soluzione
Avrei ancora impostato l'INNODB_BUFFER_POL_SIZE molto più alto che 400m. La ragione? La piscina tampone InnoDB rimarrà ancora cache i dati e le pagine indicizzate necessarie per le tabelle accessibili frequentemente.
Eseguire questa query per ottenere l'InnoDb_buffer_pool_size consigliato in MB:
Selezionare Concat (rotondo (KBS / Power (1024, se (PW <0,0, se (PW> 3,0, PW))) + 0.49999), substr ('KMG', IF (PW <0, 0, se (PW> 3,0, PW)) + 1,1)) consigliato_innodb_buffer_pool_size da (Seleziona somma (data_Length + index_Length) KBS da INFORMAZIONI_SCHEMA.Tables Where Engine= 'INNODB') A, (selezionare 2 PW) B;
Utilizzare semplicemente il risultato di questa query o l'80% della RAM installata (nel tuo caso 19660M) a seconda di quale è più piccolo.
Imposi anche l'INNODB_LOG_FILE_SIZE al 25% della dimensione del pool del buffer InnoDB. Sfortunatamente, il valore massimo di INNODB_LOG_FILE_SIZE è 2047 m. (1 m Breve di 2G) Quindi, impostare InnoDB_Log_File_Size a 2047M dal 25% di InnoDb_Buffer_Pool_Size della mia impostazione consigliata è 4915m.
Ancora un'altra raccomandazione è quella di Disabilita la conformità dell'acido . Utilizzare 0 o 2 per INNODB_FLUSH_LOG_AT_TRX_COMMIT (il valore predefinito è 1 che supporta la conformità acida) questo produrrà più velocemente InnoDb scrive a rischio di perdere fino a 1 secondo valore di transazioni in caso di incidente. .
Altri suggerimenti
potrebbe valere la pena di leggere slow-mysql-insert se non lo hai già fatto. Questo link ai documenti MySQL sulla questione - Soprattutto per quanto riguarda una transazione se si sta facendo più inserti a un grande tavolo.
Più rilevante è Questo articolo mysql sulle prestazioni di InnoDb e ZFS che considera specificamente la dimensione del pool tampone.