Re Slowlog:mostraci il tuo my.cnf. Erano le modifiche nel [mysqld]
sezione? Provalo tramite SELECT SLEEP(12);
, quindi cerca sia nel file che nella tabella.
Metodo alternativo per trovare la query:poiché la query richiede diversi minuti, esegui SHOW FULL PROCESSLIST;
quando pensi che potrebbe essere in esecuzione.
Quanta RAM hai? non avere max_allowed_packet=300M
a meno che tu non abbia almeno 30 GB di RAM. Altrimenti stai rischiando lo scambio (o addirittura il crash). Mantieni questa impostazione sotto l'1% di RAM.
Per un'ulteriore analisi delle regolazioni, fornire (1) dimensione della RAM, (2) SHOW VARIABLES;
e (3) SHOW GLOBAL STATUS;
.
Ri deleted_at
:Il collegamento che hai fornito inizia con "La colonna eliminata_at non è un buon candidato per l'indice". Hai interpretato male. Si tratta di una singola colonna INDEX(deleted_at)
. Sto suggerendo un indice composito come INDEX(contact_id, job_class_name, execute_at, deleted_at)
.
158 secondi per una semplice query su un tavolino? Potrebbe essere che ce ne siano molti altro cose in corso. Ottieni il PROCESSLIST
.
Re Indici separati e compositi:pensa a due indici:INDEX(last_name)
e INDEX(first_name)
. Scorri l'indice del cognome per trovare "James", quindi cosa puoi fare? Sfogliare l'altro indice per "Rick" non ti aiuterà a trovarmi.
Analisi delle VARIABILI e dello STATO GLOBALE
Osservazioni:
- Versione:5.7.22-log
- 1,00 GB di RAM
- Tempo di attività =16 gg 10:30:19
- Sei sicuro che fosse uno SHOW GLOBAL STATUS?
- Non stai utilizzando Windows.
- Versione a 64 bit in esecuzione
- Sembra che tu stia eseguendo interamente (o principalmente) InnoDB.
Le questioni più importanti:
innodb_buffer_pool_size -- Pensavo che l'avessi a 213 M, non a 10 M. 10M è troppo piccolo. D'altra parte, sembra che tu abbia meno di così tanti dati.
Poiché la RAM è così piccola, consiglio di ridurre tmp_table_size e max_heap_table_size e max_allowed_packet a 8 M. E abbassare table_open_cache, table_definition_cache e innodb_open_files a 500.
Cosa causa così tante connessioni simultanee?
Dettagli e altre osservazioni:
( innodb_buffer_pool_size / _ram ) = 10M / 1024M = 0.98%
-- % di RAM utilizzata per InnoDB buffer_pool
( innodb_buffer_pool_size ) = 10M
-- Dati InnoDB + Cache indice
( innodb_lru_scan_depth ) = 1,024
-- "InnoDB:page_cleaner:1000 ms del ciclo previsto..." può essere risolto abbassando lru_scan_depth
( Innodb_buffer_pool_pages_free / Innodb_buffer_pool_pages_total ) = 375 / 638 = 58.8%
-- Pct di buffer_pool attualmente non in uso-- innodb_buffer_pool_size è più grande del necessario?
( Innodb_buffer_pool_bytes_data / innodb_buffer_pool_size ) = 4M / 10M = 40.0%
-- Percentuale del pool di buffer occupato dai dati-- Una piccola percentuale può indica che buffer_pool è inutilmente grande.
( innodb_log_buffer_size / _ram ) = 16M / 1024M = 1.6%
-- Percentuale di RAM utilizzata per il buffering delle scritture dei log di InnoDB.-- Troppo grande sottrae ad altri usi della RAM.
( innodb_log_file_size * innodb_log_files_in_group / innodb_buffer_pool_size ) = 48M * 2 / 10M = 960.0%
-- Rapporto tra la dimensione del registro e la dimensione del pool_buffer. Si consiglia il 50%, ma guarda altri calcoli per sapere se è importante.-- Non è necessario che il registro sia più grande del pool di buffer.
( innodb_flush_method ) = innodb_flush_method =
-- Come InnoDB dovrebbe chiedere al sistema operativo di scrivere blocchi. Suggerisci O_DIRECT o O_ALL_DIRECT (Percona) per evitare il doppio buffering. (Almeno per Unix.) Vedi chrischandler per un avvertimento su O_ALL_DIRECT
( innodb_flush_neighbors ) = 1
-- Una piccola ottimizzazione durante la scrittura di blocchi su disco.-- Usa 0 per le unità SSD; 1 per HDD.
( innodb_io_capacity ) = 200
-- Operazioni di I/O al secondo disponibili su disco. 100 per unità lente; 200 per unità di filatura; 1000-2000 per SSD; moltiplicare per il fattore RAID.
( innodb_print_all_deadlocks ) = innodb_print_all_deadlocks = OFF
-- Se registrare tutti i deadlock.-- Se sei afflitto da deadlock, attivalo. Attenzione:se hai molti deadlock, questo potrebbe scrivere molto sul disco.
( min( tmp_table_size, max_heap_table_size ) / _ram ) = min( 16M, 16M ) / 1024M = 1.6%
-- Percentuale di RAM da allocare quando è necessaria una tabella MEMORY (per tabella) o una tabella temporanea all'interno di un SELECT (per tabella temporanea per alcuni SELECT). Troppo alto può portare allo scambio.-- Riduci tmp_table_size e max_heap_table_size a, diciamo, l'1% della ram.
( net_buffer_length / max_allowed_packet ) = 16,384 / 16M = 0.10%
( local_infile ) = local_infile = ON
-- local_infile =ON è un potenziale problema di sicurezza
( Select_scan / Com_select ) = 111,324 / 264144 = 42.1%
-- % di selezioni che eseguono la scansione completa della tabella. (Può essere ingannato dalle routine memorizzate.)-- Aggiungi indici / ottimizza le query
( long_query_time ) = 10
-- Cutoff (Seconds) per definire una query "lenta".-- Suggerisci 2
( Max_used_connections / max_connections ) = 152 / 151 = 100.7%
-- % picco di connessioni:aumenta max_connections e/o diminuisci wait_timeout
Hai la cache delle query a metà. Dovresti impostare sia query_cache_type =OFF che query_cache_size =0 . C'è (secondo una voce) un "bug" nel codice QC che lascia del codice attivo a meno che tu non disattivi entrambe queste impostazioni.
Anormalmente piccolo:
( Innodb_pages_read + Innodb_pages_written ) / Uptime = 0.186
Created_tmp_files = 0.015 /HR
Handler_write = 0.21 /sec
Innodb_buffer_pool_bytes_data = 3 /sec
Innodb_buffer_pool_pages_data = 256
Innodb_buffer_pool_pages_total = 638
Key_reads+Key_writes + Innodb_pages_read+Innodb_pages_written+Innodb_dblwr_writes+Innodb_buffer_pool_pages_flushed = 0.25 /sec
Table_locks_immediate = 2.8 /HR
Table_open_cache_hits = 0.44 /sec
innodb_buffer_pool_chunk_size = 5MB
Anormalmente grande:
Com_create_db = 0.41 /HR
Com_drop_db = 0.41 /HR
Connection_errors_peer_address = 2
Performance_schema_file_instances_lost = 9
Ssl_default_timeout = 500
Stringhe anomale:
ft_boolean_syntax = + -><()~*:&
have_ssl = YES
have_symlink = DISABLED
innodb_fast_shutdown = 1
optimizer_trace = enabled=off,one_line=off
optimizer_trace_features = greedy_search=on, range_optimizer=on, dynamic_range=on, repeated_subselect=on
session_track_system_variables = time_zone, autocommit, character_set_client, character_set_results, character_set_connection
slave_rows_search_algorithms = TABLE_SCAN,INDEX_SCAN