sql >> データベース >  >> RDS >> Mysql

E_WARNING:STMT_PREPAREパケットの送信中にエラーが発生しました。 PID =*

    Re Slowlog:my.cnfを見せてください。 [mysqld]に変更がありましたか セクション? SELECT SLEEP(12);でテストします 、次にファイルとテーブルの両方を調べます。

    クエリを見つける別の方法:クエリには数分かかるため、SHOW FULL PROCESSLIST;を実行します。 実行されている可能性があると思われる場合。

    どのくらいのRAMがありますか? しない max_allowed_packet=300Mがあります 少なくとも30GBのRAMがない限り。それ以外の場合は、スワッピング(またはクラッシュ)のリスクがあります。その設定をRAMの1%未満に保ちます。

    調整可能ファイルの詳細な分析については、(1)RAMサイズ、(2)SHOW VARIABLES;を提供してください。 (3)SHOW GLOBAL STATUS;

    deleted_atを再確認してください :あなたが与えたリンクは、「列deleted_atは適切なインデックス候補ではありません」で始まります。あなたはそれを誤解しました。単一列のINDEX(deleted_at)について話している 。 INDEX(contact_id, job_class_name, execute_at, deleted_at)などの複合インデックスを提案しています 。

    小さなテーブルでの単純なクエリの場合は158秒ですか? その他がたくさんある可能性があります 進行中のもの。 PROCESSLISTを取得します 。

    インデックスとコンポジットを分離する:2つのインデックスを考えてください:INDEX(last_name) およびINDEX(first_name) 。 last_nameインデックスをめくって「James」を見つけたら、何ができますか? 「リック」の他のインデックスをめくっても、私を見つけるのに役立ちません。

    変数とグローバルステータスの分析

    観察:

    • バージョン:5.7.22ログ
    • 1.00GBのRAM
    • 稼働時間=16d10:30:19
    • これがSHOWGLOBALSTATUSでしたか?
    • Windowsで実行していません。
    • 64ビットバージョンの実行
    • 完全に(またはほとんど)InnoDBを実行しているようです。

    より重要な問題:

    innodb_buffer_pool_size-10Mではなく213Mであると思いました。 10Mは小さすぎます。一方、データはそれほど多くないようです。

    RAMが非常に小さいため、tmp_table_size、max_heap_table_size、max_allowed_pa​​cketを8Mに下げ、table_open_cache、table_definition_cache、innodb_open_filesを500に下げることをお勧めします。

    何がこれほど多くの同時接続を引き起こしますか?

    詳細とその他の所見:

    ( innodb_buffer_pool_size / _ram ) = 10M / 1024M = 0.98% --InnoDB buffer_poolに使用されるRAMの%

    ( innodb_buffer_pool_size ) = 10M --InnoDBデータ+インデックスキャッシュ

    ( innodb_lru_scan_depth ) = 1,024 --「InnoDB:page_cleaner:1000msの意図したループがかかりました...」は、lru_scan_depthを下げることで修正される可能性があります

    ( Innodb_buffer_pool_pages_free / Innodb_buffer_pool_pages_total ) = 375 / 638 = 58.8% --現在使用されていないbuffer_poolの割合--innodb_buffer_pool_sizeが必要以上に大きいですか?

    ( Innodb_buffer_pool_bytes_data / innodb_buffer_pool_size ) = 4M / 10M = 40.0% -データが占めるバッファプールの割合-わずかな割合 buffer_poolが不必要に大きいことを示します。

    ( innodb_log_buffer_size / _ram ) = 16M / 1024M = 1.6% --InnoDBログ書き込みのバッファリングに使用されるRAMの割合。--大きすぎると、RAMの他の用途が失われます。

    ( innodb_log_file_size * innodb_log_files_in_group / innodb_buffer_pool_size ) = 48M * 2 / 10M = 960.0% --buffer_poolサイズに対するログサイズの比率。 50%が推奨されますが、それが重要かどうかについては他の計算を参照してください。-ログはバッファープールより大きくする必要はありません。

    ( innodb_flush_method ) = innodb_flush_method = --InnoDBがOSにブロックの書き込みを要求する方法。二重バッファリングを回避するために、O_DIRECTまたはO_ALL_DIRECT(Percona)を提案します。 (少なくともUnixの場合。)O_ALL_DIRECTに関する警告については、chrischandlerを参照してください

    ( innodb_flush_neighbors ) = 1 -ブロックをディスクに書き込むときのマイナーな最適化。-SSDドライブには0を使用します。 HDDの場合は1。

    ( innodb_io_capacity ) = 200 --ディスク上で可能な1秒あたりのI/O操作。低速ドライブの場合は100。回転ドライブの場合は200。 SSDの場合は1000〜2000。 RAID係数を掛けます。

    ( innodb_print_all_deadlocks ) = innodb_print_all_deadlocks = OFF -すべてのデッドロックをログに記録するかどうか。-デッドロックに悩まされている場合は、これをオンにします。注意:デッドロックが多い場合、ディスクに大量の書き込みが発生する可能性があります。

    ( min( tmp_table_size, max_heap_table_size ) / _ram ) = min( 16M, 16M ) / 1024M = 1.6% --MEMORYテーブル(テーブルごと)またはSELECT内の一時テーブル(一部のSELECTごとの一時テーブルごと)が必要な場合に割り当てるRAMの割合。高すぎるとスワッピングにつながる可能性があります。-tmp_table_sizeとmax_heap_table_sizeを、たとえばRAMの1%に減らします。

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

    ( local_infile ) = local_infile = ON --local_infile=ONは潜在的なセキュリティ問題です

    ( Select_scan / Com_select ) = 111,324 / 264144 = 42.1% -全表スキャンを実行している選択の%。 (保存されたルーチンにだまされる可能性があります。)-インデックスの追加/クエリの最適化

    ( long_query_time ) = 10 -「遅い」クエリを定義するためのカットオフ(秒)。-提案2

    ( Max_used_connections / max_connections ) = 152 / 151 = 100.7% -接続のピーク%--max_connectionsを増やすか、wait_timeoutを減らす

    クエリキャッシュの半分があります。 query_cache_type=OFFとquery_cache_size=0の両方を設定する必要があります。 (噂によると)QCコードには「バグ」があり、両方の設定をオフにしない限り、一部のコードはオンのままになります。

    異常に小さい:

    ( 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
    

    異常に大きい:

    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
    

    異常な文字列:

    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. PostgreSQLで重複する日付範囲を検索する

    2. CONTINUE In Loopsを使用して、Oracleで制御を再開します

    3. mySQLロードデータローカルinfile不正な数値形式

    4. mysqlによるaddslashes()の使用