Mysql
 sql >> Base de données >  >> RDS >> Mysql

E_WARNING :erreur lors de l'envoi du paquet STMT_PREPARE. PID=*

Re Slowlog :Montrez-nous votre my.cnf. Les changements ont-ils été dans le [mysqld] section? Testez-le via SELECT SLEEP(12); , puis regardez à la fois dans le fichier et dans le tableau.

Autre façon de trouver la requête :étant donné que la requête prend plusieurs minutes, faites SHOW FULL PROCESSLIST; lorsque vous pensez qu'il pourrait être en cours d'exécution.

Combien de RAM as-tu? Ne pas avoir max_allowed_packet=300M sauf si vous avez au moins 30 Go de RAM. Sinon, vous risquez d'échanger (ou même de planter). Gardez ce paramètre sous 1 % de RAM.

Pour une analyse plus approfondie des paramètres réglables, veuillez fournir (1) la taille de la RAM, (2) SHOW VARIABLES; et (3) SHOW GLOBAL STATUS; .

Re deleted_at :Ce lien que vous avez donné commence par "La colonne delete_at n'est pas un bon candidat d'index". Vous l'avez mal interprété. Il s'agit d'un INDEX(deleted_at) à une seule colonne . Je suggère un index composite tel que INDEX(contact_id, job_class_name, execute_at, deleted_at) .

158 secondes pour une simple requête sur une petite table ? Il se peut qu'il y ait beaucoup d'autres des trucs qui se passent. Obtenir la PROCESSLIST .

Concernant les index séparés par rapport aux composites :pensez à deux index :INDEX(last_name) et INDEX(first_name) . Vous parcourez l'index last_name pour trouver "James", alors que pouvez-vous faire ? Feuilleter l'autre index pour "Rick" ne vous aidera pas à me trouver.

Analyse des VARIABLES et STATUT GLOBAL

Observations :

  • Version :5.7.22-log
  • 1,00 Go de RAM
  • Temps de disponibilité =16j 10:30:19
  • Êtes-vous sûr qu'il s'agissait d'un AFFICHER LE STATUT GLOBAL ?
  • Vous n'exécutez pas sous Windows.
  • Exécution de la version 64 bits
  • Vous semblez exécuter entièrement (ou principalement) InnoDB.

Les problèmes les plus importants :

innodb_buffer_pool_size - Je pensais que vous l'aviez à 213M, pas à 10M. 10M c'est beaucoup trop petit. D'un autre côté, vous semblez avoir moins de données que cela.

Étant donné que la RAM est si petite, je recommande de réduire tmp_table_size, max_heap_table_size et max_allowed_packet à 8 M. Et de baisser table_open_cache, table_definition_cache et innodb_open_files à 500.

Qu'est-ce qui cause autant de connexions simultanées ?

Détails et autres observations :

( innodb_buffer_pool_size / _ram ) = 10M / 1024M = 0.98% -- % de RAM utilisé pour InnoDB buffer_pool

( innodb_buffer_pool_size ) = 10M -- Données InnoDB + cache d'index

( innodb_lru_scan_depth ) = 1,024 -- "InnoDB :page_cleaner :1 000 ms de boucle prévue a pris..." peut être corrigé en diminuant lru_scan_depth

( Innodb_buffer_pool_pages_free / Innodb_buffer_pool_pages_total ) = 375 / 638 = 58.8% -- Une partie de buffer_pool n'est pas utilisée actuellement -- innodb_buffer_pool_size est plus grand que nécessaire ?

( Innodb_buffer_pool_bytes_data / innodb_buffer_pool_size ) = 4M / 10M = 40.0% -- Pourcentage du pool de mémoire tampon occupé par les données -- Un petit pourcentage peut indiquent que le buffer_pool est inutilement grand.

( innodb_log_buffer_size / _ram ) = 16M / 1024M = 1.6% -- Pourcentage de RAM utilisé pour la mise en mémoire tampon des écritures de journal InnoDB. -- Une trop grande quantité de RAM enlève d'autres utilisations de la RAM.

( innodb_log_file_size * innodb_log_files_in_group / innodb_buffer_pool_size ) = 48M * 2 / 10M = 960.0% -- Rapport entre la taille du journal et la taille du buffer_pool. 50 % est recommandé, mais consultez d'autres calculs pour savoir si cela compte.-- Le journal n'a pas besoin d'être plus grand que le pool de mémoire tampon.

( innodb_flush_method ) = innodb_flush_method = -- Comment InnoDB devrait demander au système d'exploitation d'écrire des blocs. Suggérez O_DIRECT ou O_ALL_DIRECT (Percona) pour éviter la double mise en mémoire tampon. (Au moins pour Unix.) Voir chrischandler pour une mise en garde à propos de O_ALL_DIRECT

( innodb_flush_neighbors ) = 1 -- Une optimisation mineure lors de l'écriture de blocs sur le disque. -- Utilisez 0 pour les disques SSD; 1 pour le disque dur.

( innodb_io_capacity ) = 200 -- Capacité d' opérations d' E / S par seconde sur disque . 100 pour les lecteurs lents ; 200 pour les entraînements en rotation ; 1000-2000 pour les SSD ; multiplier par le facteur RAID.

( innodb_print_all_deadlocks ) = innodb_print_all_deadlocks = OFF -- Si vous souhaitez enregistrer tous les blocages. -- Si vous êtes aux prises avec des blocages, activez cette option. Attention :Si vous avez beaucoup de blocages, cela peut écrire beaucoup sur le disque.

( min( tmp_table_size, max_heap_table_size ) / _ram ) = min( 16M, 16M ) / 1024M = 1.6% -- Pourcentage de RAM à allouer lorsque vous avez besoin d'une table MEMORY (par table) ou d'une table temporaire dans un SELECT (par table temporaire pour certains SELECT). Une valeur trop élevée peut entraîner un échange. -- Diminuez tmp_table_size et max_heap_table_size à, disons, 1 % de RAM.

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

( local_infile ) = local_infile = ON -- local_infile =ON est un problème de sécurité potentiel

( Select_scan / Com_select ) = 111,324 / 264144 = 42.1% -- % de sélections effectuant une analyse complète de la table. (Peut être trompé par les routines stockées.)-- Ajouter des index / optimiser les requêtes

( long_query_time ) = 10 -- Coupure (Secondes) pour définir une requête "lente".-- Suggestion 2

( Max_used_connections / max_connections ) = 152 / 151 = 100.7% -- Pic % de connexions -- augmenter max_connections et/ou diminuer wait_timeout

Vous avez la moitié du cache de requêtes. Vous devez définir à la fois query_cache_type =OFF et query_cache_size =0 . Il y a (selon une rumeur) un "bogue" dans le code QC qui laisse du code activé à moins que vous ne désactiviez ces deux paramètres.

Anormalement petit :

( 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

Anormalement grand :

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

Chaînes anormales :

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