Mysql
 sql >> Baza danych >  >> RDS >> Mysql

E_WARNING:Błąd podczas wysyłania pakietu STMT_PREPARE. PID=*

Re Slowlog:Pokaż nam swój plik my.cnf. Czy zmiany w [mysqld] Sekcja? Przetestuj go za pomocą SELECT SLEEP(12); , a następnie zajrzyj zarówno do pliku, jak i do tabeli.

Alternatywny sposób znalezienia zapytania:ponieważ zapytanie zajmuje kilka minut, wykonaj SHOW FULL PROCESSLIST; kiedy myślisz, że może być uruchomiony.

Ile masz pamięci RAM? Nie mieć max_allowed_packet=300M chyba że masz co najmniej 30 GB pamięci RAM. W przeciwnym razie ryzykujesz zamianą (lub nawet awarią). Zachowaj to ustawienie poniżej 1% pamięci RAM.

Aby uzyskać dalszą analizę strojów, podaj (1) rozmiar pamięci RAM, (2) SHOW VARIABLES; oraz (3) SHOW GLOBAL STATUS; .

Ponownie deleted_at :Ten link, który podałeś, zaczyna się od "Kolumna usunięta_at nie jest dobrym kandydatem do indeksowania". Źle to zinterpretowałeś. Mówi o jednokolumnowym INDEX(deleted_at) . Proponuję indeks złożony, taki jak INDEX(contact_id, job_class_name, execute_at, deleted_at) .

158 sekund na proste zapytanie na małym stole? Możliwe, że jest wiele innych rzeczy się dzieje. Pobierz PROCESSLIST .

Re Oddzielne indeksy od złożonych:Pomyśl o dwóch indeksach:INDEX(last_name) i INDEX(first_name) . Przeglądasz indeks nazwisk, aby znaleźć „James”, co wtedy możesz zrobić? Przeglądanie innego indeksu dla „Ricka” nie pomoże ci mnie znaleźć.

Analiza ZMIENNYCH i STANU GLOBALNEGO

Obserwacje:

  • Wersja:5.7.22 log
  • 1,00 GB pamięci RAM
  • Czas pracy =16 dni 10:30:19
  • Czy na pewno był to POKAŻ STAN GLOBALNY?
  • Nie pracujesz w systemie Windows.
  • Uruchomiona wersja 64-bitowa
  • Wygląda na to, że działasz w całości (lub w większości) InnoDB.

Ważniejsze problemy:

innodb_buffer_pool_size -- Myślałem, że masz to w 213M, a nie 10M. 10M to zdecydowanie za mało. Z drugiej strony wydaje się, że masz mniej niż tyle danych.

Ponieważ pamięć RAM jest tak mała, zalecam zmniejszenie wartości tmp_table_size i max_heap_table_size i max_allowed_packet do 8M. I niższe table_open_cache, table_definition_cache i innodb_open_files do 500.

Co powoduje tyle jednoczesnych połączeń?

Szczegóły i inne obserwacje:

( innodb_buffer_pool_size / _ram ) = 10M / 1024M = 0.98% -- % pamięci RAM używanej przez pulę_buforów InnoDB

( innodb_buffer_pool_size ) = 10M -- InnoDB Data + Index cache

( innodb_lru_scan_depth ) = 1,024 -- „InnoDB:page_cleaner:zamierzona pętla 1000 ms zajęła ...” można naprawić, obniżając lru_scan_depth

( Innodb_buffer_pool_pages_free / Innodb_buffer_pool_pages_total ) = 375 / 638 = 58.8% -- Część puli buforów nie jest obecnie używana -- innodb_buffer_pool_size jest większa niż to konieczne?

( Innodb_buffer_pool_bytes_data / innodb_buffer_pool_size ) = 4M / 10M = 40.0% – Procent puli buforów zajętych przez dane – Niewielki procent może wskazują, że pula_buforów jest niepotrzebnie duża.

( innodb_log_buffer_size / _ram ) = 16M / 1024M = 1.6% -- Procent pamięci RAM używanej do buforowania zapisów dziennika InnoDB.-- Zbyt duże odebranie z innych zastosowań pamięci RAM.

( innodb_log_file_size * innodb_log_files_in_group / innodb_buffer_pool_size ) = 48M * 2 / 10M = 960.0% -- Stosunek rozmiaru dziennika do rozmiaru bufora_puli. Zalecane jest 50%, ale zobacz inne obliczenia, czy ma to znaczenie.-- Dziennik nie musi być większy niż pula buforów.

( innodb_flush_method ) = innodb_flush_method = -- Jak InnoDB powinien prosić system operacyjny o zapisywanie bloków. Zasugeruj O_DIRECT lub O_ALL_DIRECT (Percona), aby uniknąć podwójnego buforowania. (Przynajmniej dla Uniksa.) Zobacz chrischandlera, aby uzyskać zastrzeżenie dotyczące O_ALL_DIRECT

( innodb_flush_neighbors ) = 1 -- Niewielka optymalizacja podczas zapisywania bloków na dysku.-- Użyj 0 dla dysków SSD; 1 na dysk twardy.

( innodb_io_capacity ) = 200 -- Liczba operacji we/wy na sekundę na dysku . 100 dla wolnych napędów; 200 dla napędów wirujących; 1000-2000 dla dysków SSD; pomnóż przez współczynnik RAID.

( innodb_print_all_deadlocks ) = innodb_print_all_deadlocks = OFF -- Czy rejestrować wszystkie Zakleszczenia.-- Jeśli nękają Cię Zakleszczenia, włącz to. Uwaga:jeśli masz wiele zakleszczeń, może to spowodować duże zapisanie na dysku.

( min( tmp_table_size, max_heap_table_size ) / _ram ) = min( 16M, 16M ) / 1024M = 1.6% -- Procent pamięci RAM do przydzielenia, gdy potrzebna jest tabela MEMORY (na tabelę) lub tabela temp wewnątrz SELECT (na tabelę temp na niektóre pozycje SELECT). Zbyt wysoka może prowadzić do zamiany.-- Zmniejsz tmp_table_size i max_heap_table_size do, powiedzmy, 1% pamięci RAM.

( net_buffer_length / max_allowed_packet ) = 16,384 / 16M = 0.10%

( local_infile ) = local_infile = ON -- local_infile =WŁ. to potencjalny problem z bezpieczeństwem

( Select_scan / Com_select ) = 111,324 / 264144 = 42.1% -- % zaznaczeń wykonujących pełne skanowanie tabeli. (Może zostać oszukany przez przechowywane procedury).-- Dodaj indeksy/optymalizuj zapytania

( long_query_time ) = 10 -- Odcięcie (w sekundach) do zdefiniowania „wolnego” zapytania.-- Sugeruj 2

( Max_used_connections / max_connections ) = 152 / 151 = 100.7% -- Szczytowy % połączeń-- zwiększ max_connections i/lub zmniejsz wait_timeout

Masz połowę zniżki na pamięć podręczną zapytań. Należy ustawić zarówno query_cache_type =OFF , jak i query_cache_size =0 . Istnieje (zgodnie z plotką) „błąd” w kodzie QC, który pozostawia włączony kod, chyba że wyłączysz oba te ustawienia.

Rażąco mały:

( 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

Rażąco duży:

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

Nieprawidłowe ciągi:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL:poprawna próbka przypisania zmiennej?

  2. Jakie jest obejście w przypadku używania dynamicznego SQL w procedurze składowanej?

  3. dlaczego mysql zmienia mój widok kodu?

  4. Wyczerpano dozwolony rozmiar pamięci 134217728 bajtów (próbowano przydzielić 42 bajty)

  5. Duża tabela w mysql Aktualizacja wierszy na podstawie csv za każdym razem