sql >> Databáze >  >> RDS >> Mysql

E_WARNING:Chyba při odesílání paketu STMT_PREPARE. PID=*

Re Slowlog:Ukažte nám svůj my.cnf. Byly změny v [mysqld] sekce? Otestujte to pomocí SELECT SLEEP(12); , pak se podívejte do souboru i do tabulky.

Alternativní způsob, jak najít dotaz:Protože dotaz trvá několik minut, proveďte SHOW FULL PROCESSLIST; když si myslíte, že by mohl být spuštěn.

Kolik máš RAM? Ne mít max_allowed_packet=300M pokud nemáte alespoň 30 GB RAM. Jinak riskujete výměnu (nebo dokonce havárii). Udržujte toto nastavení pod 1 % RAM.

Pro další analýzu laditelných možností uveďte (1) velikost RAM, (2) SHOW VARIABLES; a (3) SHOW GLOBAL STATUS; .

Znovu deleted_at :Odkaz, který jste uvedl, začíná slovy „Sloupec delete_at není vhodným kandidátem na index“. Špatně si to vyložil. Jedná se o jednosloupcový INDEX(deleted_at) . Navrhuji složený index, jako je INDEX(contact_id, job_class_name, execute_at, deleted_at) .

158 sekund na jednoduchý dotaz na malém stole? Je možné, že existuje spousta jiných věci se dějí. Získejte PROCESSLIST .

Oddělené indexy versus složené:Představte si dva indexy:INDEX(last_name) a INDEX(first_name) . Listujete v indexu příjmení a najdete „James“, co pak můžete dělat? Listování v dalším indexu pro „Rick“ vám nepomůže mě najít.

Analýza VARIABLES a GLOBAL STATUS

Postřehy:

  • Verze:5.7.22-log
  • 1,00 GB paměti RAM
  • Doba provozu =16 d 10:30:19
  • Jste si jisti, že se jednalo o ZOBRAZIT GLOBÁLNÍ STAV?
  • Nepoužíváte systém Windows.
  • Spuštění 64bitové verze
  • Zdá se, že používáte úplně (nebo většinou) InnoDB.

Důležitější problémy:

innodb_buffer_pool_size -- Myslel jsem, že to máš na 213M, ne na 10M. 10M je příliš málo. Na druhou stranu se zdá, že máte méně než tolik dat.

Protože je RAM tak malá, doporučuji snížit tmp_table_size a max_heap_table_size a max_allowed_packet na 8M. A snížit table_open_cache, table_definition_cache a innodb_open_files na 500.

Co způsobuje tolik současných připojení?

Podrobnosti a další postřehy:

( innodb_buffer_pool_size / _ram ) = 10M / 1024M = 0.98% -- % paměti RAM použité pro InnoDB buffer_pool

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

( innodb_lru_scan_depth ) = 1,024 -- "InnoDB:page_cleaner:zamýšlená smyčka trvala 1000 ms..." lze opravit snížením hodnoty lru_scan_depth

( Innodb_buffer_pool_pages_free / Innodb_buffer_pool_pages_total ) = 375 / 638 = 58.8% -- Pct fondu buffer_pool se momentálně nepoužívá -- innodb_buffer_pool_size je větší, než je nutné?

( Innodb_buffer_pool_bytes_data / innodb_buffer_pool_size ) = 4M / 10M = 40.0% -- Procento fondu vyrovnávací paměti zabrané daty -- Malé procento může indikují, že buffer_pool je zbytečně velký.

( innodb_log_buffer_size / _ram ) = 16M / 1024M = 1.6% -- Procento paměti RAM použité pro ukládání zápisů protokolu InnoDB do vyrovnávací paměti. -- Příliš velká paměť ubírá na jiné způsoby použití pro RAM.

( innodb_log_file_size * innodb_log_files_in_group / innodb_buffer_pool_size ) = 48M * 2 / 10M = 960.0% -- Poměr velikosti protokolu k velikosti buffer_pool. Doporučuje se 50 %, ale podívejte se na další výpočty, zda na tom záleží.-- Protokol nemusí být větší než zásobník vyrovnávacích pamětí.

( innodb_flush_method ) = innodb_flush_method = -- Jak by měl InnoDB žádat OS, aby zapisoval bloky. Navrhněte O_DIRECT nebo O_ALL_DIRECT (Percona), abyste se vyhnuli dvojitému ukládání do vyrovnávací paměti. (Alespoň pro Unix.) Upozornění ohledně O_ALL_DIRECT

viz chrischandler

( innodb_flush_neighbors ) = 1 -- Menší optimalizace při zápisu bloků na disk. -- Použijte 0 pro SSD disky; 1 pro HDD.

( innodb_io_capacity ) = 200 - I/O operace za sekundu na disku. 100 pro pomalé jízdy; 200 pro spřádací pohony; 1000-2000 pro SSD; vynásobte faktorem RAID.

( innodb_print_all_deadlocks ) = innodb_print_all_deadlocks = OFF -- Zda zaznamenávat všechny zablokování.-- Pokud vás sužují uváznutí, zapněte toto. Upozornění:Máte-li mnoho zablokování, může to způsobit velký zápis na disk.

( min( tmp_table_size, max_heap_table_size ) / _ram ) = min( 16M, 16M ) / 1024M = 1.6% -- Procento paměti RAM k přidělení, když potřebujete tabulku MEMORY (na tabulku) nebo dočasnou tabulku uvnitř SELECT (na dočasnou tabulku podle některých SELECTů). Příliš vysoká může vést k výměně.-- Snižte tmp_table_size a max_heap_table_size na, řekněme, 1 % RAM.

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

( local_infile ) = local_infile = ON -- local_infile =ON je potenciální bezpečnostní problém

( Select_scan / Com_select ) = 111,324 / 264144 = 42.1% -- % vybraných provádějících úplné prohledání tabulky. (Uložené rutiny mohou být oklamány.)-- Přidat indexy / optimalizovat dotazy

( long_query_time ) = 10 -- Cutoff (sekundy) pro definování "pomalého" dotazu.-- Návrh 2

( Max_used_connections / max_connections ) = 152 / 151 = 100.7% -- Špičkové % připojení -- zvyšte max_connections a/nebo snižte wait_timeout

Máte mezipaměť dotazů poloviční. Měli byste nastavit jak query_cache_type =OFF, tak query_cache_size =0. V kódu kontroly kvality je (podle pověsti) „chyba“, která ponechává nějaký kód zapnutý, pokud obě tato nastavení nevypnete.

Abnormálně malý:

( 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

Neobvykle velké:

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

Abnormální řetězce:

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. Jak nakonfigurovat AppArmor pro PostgreSQL a TimescaleDB

  2. Paralelismus přichází do VAKUA

  3. PHP &MySQL Jak zobrazit kategorie libovolné podkategorie z databáze

  4. Spusťte MySQL na portu 3307 pomocí Docker Compose