Re Slowlog:Tunjukkan my.cnf Anda. Apakah perubahan pada [mysqld]
bagian? Uji melalui SELECT SLEEP(12);
, lalu lihat di file dan tabel.
Cara alternatif untuk menemukan kueri:Karena kueri membutuhkan waktu beberapa menit, lakukan SHOW FULL PROCESSLIST;
ketika Anda berpikir itu mungkin berjalan.
Berapa banyak RAM yang Anda miliki? Jangan jangan memiliki max_allowed_packet=300M
kecuali Anda memiliki setidaknya 30GB RAM. Jika tidak, Anda berisiko bertukar (atau bahkan mogok). Pertahankan pengaturan itu di bawah 1% dari RAM.
Untuk analisis merdu lebih lanjut, berikan (1) ukuran RAM, (2) SHOW VARIABLES;
dan (3) SHOW GLOBAL STATUS;
.
Kembali deleted_at
:Tautan yang Anda berikan dimulai dengan "Kolom yang dihapus_at bukanlah kandidat indeks yang baik". Anda salah mengartikannya. Ini berbicara tentang satu kolom INDEX(deleted_at)
. Saya menyarankan indeks komposit seperti INDEX(contact_id, job_class_name, execute_at, deleted_at)
.
158 detik untuk kueri sederhana di meja kecil? Bisa jadi ada banyak lainnya hal-hal yang terjadi. Dapatkan PROCESSLIST
.
Pisahkan indeks versus komposit:Pikirkan dua indeks:INDEX(last_name)
dan INDEX(first_name)
. Anda membolak-balik indeks last_name untuk menemukan "James", lalu apa yang dapat Anda lakukan? Membolak-balik indeks lain untuk "Rick" tidak akan membantu Anda menemukan saya.
Analisis VARIABEL dan STATUS GLOBAL
Pengamatan:
- Versi:5.7.22-log
- RAM 1,00 GB
- Waktu operasional =16h 10:30:19
- Apakah Anda yakin ini adalah TAMPILKAN STATUS GLOBAL?
- Anda tidak menjalankan Windows.
- Menjalankan versi 64-bit
- Tampaknya Anda menjalankan seluruhnya (atau sebagian besar) InnoDB.
Masalah Yang Lebih Penting:
innodb_buffer_pool_size -- Saya pikir Anda memilikinya di 213 juta, bukan 10 juta. 10M terlalu kecil. Di sisi lain, Anda tampaknya memiliki data yang kurang dari itu.
Karena RAM sangat kecil, saya sarankan untuk menurunkan tmp_table_size dan max_heap_table_size dan max_allowed_packet ke 8M. Dan turunkan table_open_cache, table_definition_cache, dan innodb_open_files ke 500.
Apa yang menyebabkan begitu banyak koneksi simultan?
Detail dan pengamatan lainnya:
( innodb_buffer_pool_size / _ram ) = 10M / 1024M = 0.98%
-- % RAM yang digunakan untuk buffer_pool InnoDB
( innodb_buffer_pool_size ) = 10M
-- Data InnoDB + Cache indeks
( innodb_lru_scan_depth ) = 1,024
-- "InnoDB:page_cleaner:1000ms dimaksudkan loop mengambil ..." dapat diperbaiki dengan menurunkan lru_scan_depth
( Innodb_buffer_pool_pages_free / Innodb_buffer_pool_pages_total ) = 375 / 638 = 58.8%
-- Pct buffer_pool saat ini tidak digunakan-- innodb_buffer_pool_size lebih besar dari yang diperlukan?
( Innodb_buffer_pool_bytes_data / innodb_buffer_pool_size ) = 4M / 10M = 40.0%
-- Persentase kumpulan buffer yang diambil oleh data-- Sebagian kecil mungkin menunjukkan bahwa buffer_pool terlalu besar.
( innodb_log_buffer_size / _ram ) = 16M / 1024M = 1.6%
-- Persentase RAM yang digunakan untuk buffering penulisan log InnoDB.-- Terlalu besar mengurangi penggunaan lain untuk RAM.
( innodb_log_file_size * innodb_log_files_in_group / innodb_buffer_pool_size ) = 48M * 2 / 10M = 960.0%
-- Rasio ukuran log dengan ukuran buffer_pool. 50% disarankan, tetapi lihat perhitungan lain untuk mengetahui apakah itu penting.-- Log tidak perlu lebih besar dari kumpulan buffer.
( innodb_flush_method ) = innodb_flush_method =
-- Bagaimana InnoDB meminta OS untuk menulis blok. Sarankan O_DIRECT atau O_ALL_DIRECT (Percona) untuk menghindari buffering ganda. (Setidaknya untuk Unix.) Lihat chrischandler untuk peringatan tentang O_ALL_DIRECT
( innodb_flush_neighbors ) = 1
-- Pengoptimalan kecil saat menulis blok ke disk.-- Gunakan 0 untuk drive SSD; 1 untuk HDD.
( innodb_io_capacity ) = 200
-- I/O ops per detik mampu pada disk . 100 untuk drive lambat; 200 untuk penggerak pemintalan; 1000-2000 untuk SSD; kalikan dengan faktor RAID.
( innodb_print_all_deadlocks ) = innodb_print_all_deadlocks = OFF
-- Apakah akan mencatat semua Deadlock.-- Jika Anda mengalami Deadlock, aktifkan ini. Perhatian:Jika Anda memiliki banyak kebuntuan, ini mungkin menulis banyak ke disk.
( min( tmp_table_size, max_heap_table_size ) / _ram ) = min( 16M, 16M ) / 1024M = 1.6%
-- Persentase RAM untuk dialokasikan saat membutuhkan tabel MEMORY (per tabel), atau tabel temp di dalam SELECT (per tabel temp per beberapa SELECT). Terlalu tinggi dapat menyebabkan swapping.-- Kurangi tmp_table_size dan max_heap_table_size menjadi, katakanlah, 1% dari ram.
( net_buffer_length / max_allowed_packet ) = 16,384 / 16M = 0.10%
( local_infile ) = local_infile = ON
-- local_infile =AKTIF adalah potensi masalah keamanan
( Select_scan / Com_select ) = 111,324 / 264144 = 42.1%
-- % dari pilihan yang melakukan pemindaian tabel penuh. (Mungkin tertipu oleh Rutinitas Tersimpan.)-- Tambahkan indeks / optimalkan kueri
( long_query_time ) = 10
-- Batas waktu (Detik) untuk mendefinisikan kueri "lambat".-- Sarankan 2
( Max_used_connections / max_connections ) = 152 / 151 = 100.7%
-- Puncak % koneksi-- menambah max_connections dan/atau mengurangi wait_timeout
Anda memiliki setengah Cache Kueri. Anda harus mengatur query_cache_type =OFF dan query_cache_size =0 . Ada (menurut rumor) 'bug' dalam kode QC yang membuat beberapa kode aktif kecuali Anda menonaktifkan kedua setelan tersebut.
Sangat kecil:
( 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
Luar biasa besar:
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
String tidak normal:
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