序文
一方でデータベースの最適化は、システムのボトルネックを識別し、MySQLデータベースの全体的な性能を改善することであり、一方、合理的な構造設計及びパラメータを必要とすることを可能にするために、ユーザの適切な速度を向上させるだけでなく、可能なシステムリソースを節約するように調整システムは、より大きな負荷を与えます。
1、図最適化一目
2、最適化
私は、2つのカテゴリ、ソフトとハードの最適化の最適化、ソフトウェアの最適化は、一般的に、データベースを操作することが可能に分け最適化しますが、サーバーのハードウェアとオペレーティング・パラメータを最適化することは困難です。
2.1最適化ソフトウェア
2.1.1クエリの最適化
1.まず、EXPLAIN使用したり(略称:DESC)を記述することができますクエリ実行情報を分析するためのコマンドを。
2.例:
DESC SELECT * FROM `user`
ディスプレイ:
これは、インデックスとクエリのデータは、このようなデータ数などの情報を読んで示しています。
2.1.2サブクエリの最適化
MySQLでは、時にネストされたクエリが大きなオーバーヘッドになりますが、クエリに参加しません、一時テーブルを作成し、削除し、一時テーブルを作成し、サブクエリがネストされたクエリを必要とするので、サブクエリの代わりにJOINを使用してみてください一時テーブルを作成し、効率は、ネストされたサブクエリよりも高くなっています。
2.1.3インデックス
:インデックスは、インデックスを使用して、3つの考慮事項を記録し、ここで、記事がより詳細に説明しますが、高屈折率の作者<MySQLデータベースのインデックス>に参加することができます最も重要な方法の1の速度を向上させるために、データベースクエリです
1は、「%」で始まるキーワードマッチング文字列のように、インデックスを使用していません。
2は、2つのフィールドがあるORキーワードは、クエリがインデックスを使用しますが、インデックスを使用する必要があります。
図3に示すように、複数列インデックスを使用すると、左端の一致を満たさなければなりません。
2.1.4分解テーブル
テーブルの多くの分野のために、いくつかの低周波フィールドは、この場合は、新しいテーブルを形成するために分離する必要がある場合、
テーブルの真ん中2.1.5
テーブルの多数のクエリは、それにより、クエリ時の接続時間がかかる原因を低減、中間テーブルを作成することができる加入。
2.1.6増加冗長フィールド
テーブルの真ん中を作成するだけでなく、増加の冗長性を減らすためにと同様に、クエリに参加します。
2.1.7分析表、チェックリスト、テーブルを最適化します
主な分析表をチェックリストには、主テーブル内のエラーを確認し、分析表のキーワードを配布され、テーブルは主に廃棄物によって引き起こされる、削除または更新されたテーブルスペースを排除するために最適化されています。
図1に示すように、分析テーブル:使用は、ANALYZE TABLEユーザとして、キーワードをANALYZE。
-
OP:実行する操作を示します。
-
MSG_TYPE:情報の種類、状態、情報、メモ、警告、エラーがあります。
- Msg_text:显示信息.
2、检查表: 使用 CHECK关键字,如CHECK TABLE user [option]
option 只对MyISAM有效,共五个参数值:
-
QUICK:不扫描行,不检查错误的连接.
-
FAST:只检查没有正确关闭的表.
-
CHANGED:只检查上次检查后被更改的表和没被正确关闭的表.
-
MEDIUM:扫描行,以验证被删除的连接是有效的,也可以计算各行关键字校验和.
- EXTENDED:最全面的的检查,对每行关键字全面查找.
3、优化表:使用OPTIMIZE关键字,如OPTIMIZE [LOCAL|NO_WRITE_TO_BINLOG] TABLE user;
LOCAL|NO_WRITE_TO_BINLOG都是表示不写入日志.,优化表只对VARCHAR,BLOB和TEXT有效,通过OPTIMIZE TABLE语句可以消除文件碎片,在执行过程中会加上只读锁.
2.2 硬优化
2.2.1 硬件三件套
1、配置多核心和频率高的cpu,多核心可以执行多个线程.
2、配置大内存,提高内存,即可提高缓存区容量,因此能减少磁盘I/O时间,从而提高响应速度.
3、配置高速磁盘或合理分布磁盘:高速磁盘提高I/O,分布磁盘能提高并行操作的能力.
2.2.2 优化数据库参数
优化数据库参数可以提高资源利用率,从而提高MySQL服务器性能.MySQL服务的配置参数都在my.cnf或my.ini,下面列出性能影响较大的几个参数.
-
key_buffer_size:索引缓冲区大小
-
table_cache:能同时打开表的个数
-
query_cache_size和query_cache_type:前者是查询缓冲区大小,后者是前面参数的开关,0表示不使用缓冲区,1表示使用缓冲区,但可以在查询中使用SQL_NO_CACHE表示不要使用缓冲区,2表示在查询中明确指出使用缓冲区才用缓冲区,即SQL_CACHE.
- sort_buffer_size:排序缓冲区
传送门:更多参数
https://www.mysql.com/cn/why-mysql/performance/index.html
2.2.3ライブラリサブテーブル
データベースすぎる圧力ので、最初の問題は、データベースの負荷の性能が高すぎるへの影響、ピーク・システムの性能が低下することができるです。もう一つは、行う方法たむろして、データベース上の圧力の多くを持っていましたか?だから、この時点では、システム+サブライブラリーの別々の読み取りに作り、サブテーブルを作成し、複数のライブラリに分割するためのライブラリである、データベースの複数のサービス上で展開、メインリポジトリベアラとして、書き込み要求しなければなりません。各一次ライブラリーは、その後、リードベアラによって要求されるライブラリから、ライブラリからの少なくとも1つに取り付けられています。
2.2.4キャッシュ・クラスタ
ユーザー数が成長している場合、あなたは常にマシンを追加し、このようなシステムレベルとして、マシンを追加し続けることができ、それが高い同時要求を運ぶことができます。より多くの、プラスのサブライブラリーサブテーブルによる拡張で、データベースサーバーがマシンの拡大を支援する場合、データベース・レベルの同時実行がより多くを読めば次に、データベースの同時レベルを書き込み、拡張ライブラリからより多くを追加します。しかし、大きな問題があります:データベース自体は、実際にはそれほど一般的に数千人のために、第2のあたり、同時データベースシングルキャリアを話すと、マシンが使用するデータベースが比較的高い知名度あり、高い同時要求を運ぶために使用されていません、より高価なマシンが、コストが高いです。あなたは、単にマシンの追加を停止している場合、実際には、それは間違っています。だから、多くの場合、キャッシュシステムが生まれ、高い同時実行を運ぶことで、設計キャッシュのこの部分で並行性の高いアーキテクチャを有します。したがって、毎秒同時シングルキャリアの量は、数万、毎秒数千の何百も、データベースシステムよりも能力を保有する同時高い負荷が1〜2桁よりも高くなるようにしています。だから、あまり読書とより多くの要求、キャッシュ・クラスタの導入を書くの種類のシステムの事業特性に基づくことができます。具体的には、キャッシュ・クラスタへの書き込み時にデータのデータベースを作成し、その後、読み取り要求のほとんどをホストするためにキャッシュ・クラスタを使用すると同時に、です。この場合は、キャッシュ・クラスタによって、マシンは高い並行性を運ぶより少ないリソースを使用することができます。
エピローグ
完全かつ複雑な並行性の高いシステムアーキテクチャは、含まれます:お問い合わせ以来、複雑なインフラシステムの様々な。絶妙な建築デザインの様々な。せいぜいので、小さな記事では、より良いアイデアの効果を持っているが、ほとんどこれらのデータベースの最適化のアイデア。