パーティションテーブル
表のパーティションテーブルは、テーブルには、シーンホットスポットデータの一部のみである場合、彼らはすべてのメモリに収まる、またはできないことが非常に大きいために適しています。表は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隔壁内に配置されます。
- パーティション列と索引列が一致しません
- パーティションのコストが高すぎる選択
- 開いて、(選択したパーティション内で)すべての基礎となるテーブルは高価なことができますロック
いくつかの原則の概要
- これは技術の出てくる、多くの欠陥があるある、なしにテーブルをマージします。
- あなたは、詳細なテストを行うことが最善のパフォーマンスを向上するためにビューを使用する予定の場合は、パフォーマンス・ビューは、予測することは困難です。MySQLはビューをサポートしていないインデックスを作成し、マテリアライズド・ビューをサポートしていません。
- 通常、アプリケーション・プロセスでは、より良い達成、外部キー制約を作成する場合にのみ、外部キー制約は、パフォーマンスを大量に消費します。
- ストアドプロシージャ、トリガ、ストアド・ファンクション、コピーからこれらの機能のイベント、メインでの問題にもなりやすいレプリケーションシナリオベースのステートメントは、彼らはまだネットワークのオーバーヘッドを保存しますが、だろうが、これらの特性は慎重に使用する必要があります。
- まれに、XAトランザクション特性を使用していない、それはXA設定を変更することが最善ではありません。
- クエリキャッシュ環境での高い同時クエリは、パフォーマンスの低下を引き起こす可能性があり、それを使用するのが最善ではありませんが、そのようなmemcachedのようなその他のソリューションを使用する必要があります。
MySQLの文字セットの照合
_cs代表大文字と小文字を区別の方法は、文字列を比較する
_ciは大文字と小文字を区別しない
バイナリ_bin
アプリケーション層の最適化
- ページの一部をキャッシュ、ページキャッシュモジュールを追加します。
- オープンgzip圧縮、今のところ、CPUなどの小さな価格の面では、しかし、あなたは、トラフィックの大部分を保存することができます。
- 長い距離を接続するためにプロキシサーバーを介してクライアントとの長い接続を維持するためにキープアライブを設定し、サーバとAPプロキシサーバ間の長い接続を維持しないしないでください。
キャッシュ制御戦略
- TTLの生存期間は、データが新しいデータのほとんど、あるいは全くのケースを変更するためのデータをクリーンアップするより長い生存時間を設定します。
- 表示不良、あなたは一般的に、元のデータが失敗更新時にキャッシュデータを可能にしながら、ダーティデータを受け入れることができない場合:書き込み - と失敗を書く - 二つの方法を更新します。
- 読み込みに失敗した場合は、古いデータを変更すると、情報のいくつかを回避するために、キャッシュ内のデータを読み込むことはデータが無効であるかどうかを決定するために、この情報を使用することができたときに、キャッシュ内のダーティデータを保存することができます。(オブジェクトのバージョン)
MySQLの設定の最適化
-
デフォルトの場所に置かれていないソケットとのpidファイルの文書は、それが明示的に保管場所を指定することが最善である、またはエラーが発生します
socket = "/var/lib/mysql/mysql.sock" basedir = "/var/lib/mysql" pid_file = "mysql.pid"
-
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
-
ログ
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:
-
他の構成
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/