ハイパフォーマンスMySQLの注意事項

パーティションテーブル

表のパーティションテーブルは、テーブルには、シーンホットスポットデータの一部のみである場合、彼らはすべてのメモリに収まる、またはできないことが非常に大きいために適しています。表は1024個のパーティションまで可能、パーティション式は、整数を返す必要があり、パーティションテーブルは、外部キー制約を使用することはできません。

文法

create table xxx(
    -- some columns
) engine=innodb partition by range( xxxx )(
    partition table_1 values less than ( a_value ),
    partition table_2 values less than ( a_value ),
    partition table_3 values less than ( a_value )
)

いくつかのパーティションスキーム:

  • 範囲(レンジ)
  • ハッシュ(ハッシュ)
  • キー(キー)
  • 一覧(事前に定義されたリスト)
  • 複合(マルチモード)

どのような状況下では問題になります

  • ヌル値は、フィルタリング・パーティションが無効になるように、ヌル値は、第1隔壁内に配置されます。
  • パーティション列と索引列が一致しません
  • パーティションのコストが高すぎる選択
  • 開いて、(選択したパーティション内で)すべての基礎となるテーブルは高価なことができますロック

いくつかの原則の概要

  1. これは技術の出てくる、多くの欠陥があるある、なしにテーブルをマージします。
  2. あなたは、詳細なテストを行うことが最善のパフォーマンスを向上するためにビューを使用する予定の場合は、パフォーマンス・ビューは、予測することは困難です。MySQLはビューをサポートしていないインデックスを作成し、マテリアライズド・ビューをサポートしていません。
  3. 通常、アプリケーション・プロセスでは、より良い達成、外部キー制約を作成する場合にのみ、外部キー制約は、パフォーマンスを大量に消費します。
  4. ストアドプロシージャ、トリガ、ストアド・ファンクション、コピーからこれらの機能のイベント、メインでの問題にもなりやすいレプリケーションシナリオベースのステートメントは、彼らはまだネットワークのオーバーヘッドを保存しますが、だろうが、これらの特性は慎重に使用する必要があります。
  5. まれに、XAトランザクション特性を使用していない、それはXA設定を変更することが最善ではありません。
  6. クエリキャッシュ環境での高い同時クエリは、パフォーマンスの低下を引き起こす可能性があり、それを使用するのが最善ではありませんが、そのようなmemcachedのようなその他のソリューションを使用する必要があります。

MySQLの文字セットの照合

_cs代表大文字と小文字を区別の方法は、文字列を比較する
_ciは大文字と小文字を区別しない
バイナリ_bin

アプリケーション層の最適化

  1. ページの一部をキャッシュ、ページキャッシュモジュールを追加します。
  2. オープンgzip圧縮、今のところ、CPUなどの小さな価格の面では、しかし、あなたは、トラフィックの大部分を保存することができます。
  3. 長い距離を接続するためにプロキシサーバーを介してクライアントとの長い接続を維持するためにキープアライブを設定し、サーバとAPプロキシサーバ間の長い接続を維持しないしないでください。

キャッシュ制御戦略

  1. TTLの生存期間は、データが新しいデータのほとんど、あるいは全くのケースを変更するためのデータをクリーンアップするより長い生存時間を設定します。
  2. 表示不良、あなたは一般的に、元のデータが失敗更新時にキャッシュデータを可能にしながら、ダーティデータを受け入れることができない場合:書き込み - と失敗を書く - 二つの方法を更新します。
  3. 読み込みに失敗した場合は、古いデータを変更すると、情報のいくつかを回避するために、キャッシュ内のデータを読み込むことはデータが無効であるかどうかを決定するために、この情報を使用することができたときに、キャッシュ内のダーティデータを保存することができます。(オブジェクトのバージョン)

MySQLの設定の最適化

  1. デフォルトの場所に置かれていないソケットとのpidファイルの文書は、それが明示的に保管場所を指定することが最善である、またはエラーが発生します

    socket = "/var/lib/mysql/mysql.sock"
    basedir = "/var/lib/mysql" 
    pid_file = "mysql.pid"
  2. InnoDBエンジンを使用して、あなたはPを設定する必要があります

    innodb_data_home_dir = "/var/lib/mysql/data"
    ## 10M 是文档的初始大小,autoextend 是自动扩展
    innodb_data_file_path = ibdata1:10M:autoextend 
    ## 每个表单独存储一个文档
    innodb_file_per_table = 1
    
    ## 内存的 50 - 80 %
    innodb_buffer_pool_size = 2048M
    ## innodb_buffer_pool_size 的 25%
    innodb_log_file_size = 512M
    ## 通常不需要设置的非常大, 1M - 8M 之间就可以
    innodb_log_buffer_size = 8M
    
    ## 0 把日志缓冲写到日志文档,并且每秒钟刷新一次,但是事务提交时不做任何操作。
    ## 1 默认的,并且是最安全的设置,每次事务提交都刷新到持久化存储,保证不会丢失任何已经提交的事务。
    ## 2 每次提交把日志缓冲写到日志文档,但是并不刷新,是 0 与 1 的折中。
    innodb_flush_log_at_trx_commit = 1
  3. ログ

    log_error = /var/lib/mysql/mysql-error.log
    ## 是否开启慢查询日志,1表示开启,0表示关闭
    slow_query_log = 1
    slow_query_log_file=/var/lib/mysql/mysql-slow.log
    ## 慢查询阈值,当查询时间多于设定的阈值时,记录日志
    ## long_query_time
    ## 未使用索引的查询也被记录到慢查询日志中
    ## log_queries_not_using_indexes
    ## 日志存储方式。log_output='FILE'表示将日志存入文档,默认值是'FILE'。
    ## log_output='TABLE'表示将日志存入数据库
    ## log_output:
  4. 他の構成

    default_storage_engine = InnoDB 
    ## 现代操作系统句柄开销都很小,这个应该设置的尽可能的大
    open_files_limit = 65535
    ## tmp_table_size max_heap_table_size 是用于设置使用 Memory 引擎的内存临时表能使用多大的内存,超过这个就转而使用磁盘临时表
    tmp_table_size = 32M
    max_heap_table_size = 32M
    ## 禁用查询缓存
    query_cache_type = 0
    query_cache_size = 0
    ## 默认是 100 对大多数应用进程来说应该都是不够用的,根据实际业务调整
    max_connections = <..>
    
    thread_cache = <...>
    open_files_limit = <...>

オリジナルリンク大列  https://www.dazhuanlan.com/2019/08/15/5d5513c39cda3/

おすすめ

転載: www.cnblogs.com/chinatrump/p/11416242.html