MySQLの並行性の高いコンフィグレーションの最適化

1 Star2 Stars3 Stars4 Stars5 Stars (まだ評価されていません)
Loading...

最近は報告システムに従事して、非常に責任がないが、データの量は、MySQLのインストールの発見後、Linuxサーバに配置され、同じトランザクションで比較的大きな、単一の書き込み数万のデータは、特に遅い発見構成ファイルが最適化されていないため、書き込みが特に遅くなりました。

サーバーのmysqlバージョン:

[ [email protected] 〜]#mysql -V
Mysql Ver 14.14 Distrib 5.6.25、EditLineラッパーを使用するlinux-glibc2.5(x86_64)用

mysql設定ファイルのデフォルトパス:vim /etc/my.cnf

設定後に再起動する:service mysql restart

再起動が正しく報告されない場合、構成ファイルが正しく構成されていません。

MySQLをシャットダウン….成功!
MySQLの起動….エラー:サーバはPIDファイル(/data/mysql/dbdata/report.pid)を更新せずに終了します。

現在、単純な構成情報、バッチ処理オフィスを処理するために費やされた時間は、前のもの(ここでは、ページが成功に送信された時間)よりも少なくとも20倍高速です。以下は設定情報です。各説明にBaiduを指定してください:

Lower_case_table_names = 1

Wait_timeout = 2880000
Interactive_timeout = 2880000
Max_allowed_pa​​cket = 200M

Max_connections = 700
Open-files-limit = 10240

######## 20180607エラーを削除する場合は#######################################################################################################
Key_buffer_size = 256M
Back_log = 512
Table_open_cache = 2048

Innodb_file_per_table = 1
Innodb_buffer_pool_size = 2048M

Innodb_log_file_size = 1024M
Innodb_log_buffer_size = 16M

Innodb_flush_log_at_trx_commit = 2
Innodb_flush_method = 'O_DIRECT'

Innodb_max_dirty_pages_pct = 90

#########################################

ulimit -aまたはulimit -nを使用すると、現在linuxによって設定されているオープンファイルの最大数を確認できます

Centos6.5 ulimitsの値を永久にするには、設定ファイル/etc/security/limits.confを変更する必要があります
このプロフィールに追加

*ソフトnofile 65535

*ハードnofile 65535

現在のところ、これらの2つだけが設定され、再起動の検出が有効になります。

Https://www.cnblogs.com/pangguoping/p/5791432.html

各パラメータの説明については、https://www.2cto.com/database/201711/695306.htmlを参照してください。

以下は、オンラインブログによって書かれたmysqlパラメータの説明です。

Https://www.cnblogs.com/musings/p/5913157.html

MySQLの最適化の基本をいくつか見てみましょう。MySQLの最適化は、サーバーの物理ハードウェアの最適化とMySQL自体の最適化(my.cnf)の2つに分かれています。

まず、MySQLのパフォーマンスに対するサーバハードウェアの影響
1ディスクシーク機能(ディスクI / O)現在の高速SCSIハードディスク(7200回転/秒)を例にとると、このハードディスクは理論的には1秒あたり7200回のシークを必要としますが、物理的特性によって決まり、変更する方法はありません。 MySQLは毎秒複雑なクエリ操作を多数行い、ディスクの読み書きの量を想像することができます。 したがって、ディスクI / Oは、MySQLのパフォーマンスを制限する最大の要因の1つであると一般的に考えられています。ディスクのI / O制約のため、毎日の平均アクセス数が100万PVを超えるDiscuz!フォーラムのMySQLパフォーマンスは非常に低くなります。 この制約を解決するには、次の解決策を検討してください。RAID-0 + 1ディスクアレイを使用する場合、RAID-5を使用しないように注意してください。

2CPU MySQLアプリケーションでは、SMPベースのマルチウェイ対称CPUを使用することをお勧めします。たとえば、2つのIntel Xeon 3.6GHz CPUを使用することができます。次に、mysqlだけでなく4Uサーバーをデータベースサーバーとして使用することをお勧めします。

3物理メモリMySQLを使用するデータベースサーバでは、サーバメモリは2GB以上にならないように推奨されていますが、4GBを超える物理メモリを使用することを推奨しますが、メモリは現在のサーバにとって問題ではないと言えるでしょうハイエンドサーバーは、基本的に16G以上のメモリを搭載しています。

第二に、MySQL自身の要因
上記のサーバハードウェアの制約を解決した後、MySQLの最適化の仕組みを見てみましょう。 MySQL自体の最適化は、主に設定ファイルmy.cnfのパラメータを最適化して調整することです。 以下では、パフォーマンスに大きな影響を与えるいくつかのパラメータを紹介します。 my.cnfファイルの最適化設定は、サーバーのハードウェア構成と密接に関連しているため、仮想サーバーハードウェア環境を指定します。

以下では、上記のハードウェア構成と最適化されたmy.cnfを組み合わせて説明します。

#vim /etc/my.cnf以下は、my.cnfファイルの[mysqld]セクションの内容のみを示しています。他の段落はMySQLのパフォーマンスにほとんど影響しませんので無視します。
コードは次のとおりです。コードをコピーします。
[mysqld]
ポート= 3306
Serverid = 1
ソケット= /tmp/mysql.sock
スキップロック
#MySQLの外部ロックを回避し、エラーの可能性を減らし、安定性を向上させます。
スキップ名解決
#MySQLに外部接続でDNS解決を実行するよう指示します。このオプションを使用して、MySQLがDNS解決を実行する時間をなくします。 ただし、このオプションを有効にすると、すべてのリモートホスト接続許可でIPアドレス方式を使用する必要があります。そうしないと、MySQLは通常接続要求を処理できません。
Back_log = 384
#back_logパラメータの値は、MySQLが一時的に新しいリクエストへの応答を停止する直前にスタックに配置できるリクエストの数を示します。 システムに短時間に多数の接続がある場合、このパラメータの値を増やす必要があります。この値は、着信TCP / IP接続の待機キューのサイズを指定します。 異なるオペレーティングシステムでは、このキューサイズに独自の制限があります。 バックログをオペレーティングシステムの制限より高く設定しようとすると、無効になります。 デフォルトは50です。 Linuxシステムの場合、512未満の整数を設定することが推奨されます。
Key_buffer_size = 256M
#key_buffer_sizeは、索引に使用するバッファーのサイズを指定します。索引処理のパフォーマンスを向上させるために追加することができます。 4GB程度のメモリーを持つサーバーの場合、このパラメーターは256Mまたは384Mに設定できます。 注:パラメータの値を大きすぎると設定すると、サーバー全体の効率が低下します。
Max_allowed_pa​​cket = 4M
Thread_stack = 256K
Table_cache = 128K
Sort_buffer_size = 6M
#並べ替えるときに使用できるバッファのサイズをクエリします。 注:このパラメーターに対応する割り振られたメモリーは、接続ごとに排他的です。100接続の場合、割り振られた合計ソート・バッファー・サイズは100×6 = 600MBです。 したがって、4GB程度のメモリを搭載したサーバではサーバを6-8Mに設定することをお勧めします。
Read_buffer_size = 4M
#クエリ操作で使用できるバッファのサイズを読み込みます。 sort_buffer_sizeの場合と同様に、このパラメータに対応する割り当てられたメモリも接続ごとに排他的です。
Join_buffer_size = 8M
#Query操作で使用できるバッファーのサイズはsort_buffer_sizeのバッファーのサイズと同じです。このパラメーターに対応する割り当てられたメモリーも接続ごとに排他的です。
Myisam_sort_buffer_size = 64M
Table_cache = 512
Thread_cache_size = 64
Query_cache_size = 64M
#MySQLクエリバッファのサイズを指定します。 MySQLコンソールでは、Qcache_lowmem_prunesの値が非常に大きい場合はバッファリングが不十分であることを示し、Qcache_hitsの値が非常に大きい場合はクエリバッファが頻繁に使用され、値が小さい場合は効率に影響し、 Qcache_free_blocksは、値が非常に大きい場合、バッファに多数のフラグメントがあることを示します。
Tmp_table_size = 256M
Max_connections = 768
#MySQLが許可する接続プロセスの最大数を指定します。 フォーラムにアクセスしたときにToo Many Connectionsエラーメッセージが表示された場合は、このパラメーターの値を大きくする必要があります。
Max_connect_errors = 10000000
Wait_timeout = 10
#リクエストの最大接続時間を指定します.4GBのメモリを搭載したサーバの場合は、5-10に設定できます。
Thread_concurrency = 8
#このパラメータの値はサーバーの論理CPU数* 2です。この例では、サーバーに2つの物理CPUがあり、各物理CPUはHTハイパースレッディングをサポートしているため、実際の値は4 * 2 = 8です。
スキップネットワーキング
#このオプションを有効にすると、MySQLのTCP / IP接続モードを完全に閉じることができます.WEBサーバーがMySQLデータベースサーバーにリモート接続でアクセスする場合、このオプションを有効にしないでください。 それ以外の場合は正しく接続されません!
Table_cache = 1024
#物理的なメモリが大きければ、設定は大きくなります。デフォルトは2402、最高は512-1024です。
Innodb_additional_mem_pool_size = 4M
#defaultは2Mです
Innodb_flush_log_at_trx_commit = 1
#0に設定すると、innodb_log_buffer_sizeキューがいっぱいになるまで待ってから再度保存します。デフォルトは1です。
Innodb_log_buffer_size = 2M
#default is 1M
Innodb_thread_concurrency = 8
#你的服务器CPUにはいくつかのものがいくつか設定されていますが、通常はデフォルトのものを使用することをお勧めします8
Key_buffer_size = 256M
#Defaultは218で、128に調整されています。
Tmp_table_size = 64M
#デフォルトは16Mで、64-256に調整されています。
Read_buffer_size = 4M
#Defaultは64Kです
Read_rnd_buffer_size = 16M
#デフォルトは256Kです
Sort_buffer_size = 32M
#デフォルトは256Kです
Thread_cache_size = 120
#defaultは60です
Query_cache_size = 32M

私がデータベースプラットフォームアプリケーションから始めれば、私はまだmyisamを好むでしょう。

PS:あなたのmyisamはあまりにも多くの書き込み操作に抵抗できないと言う人もいますが、私はアーキテクチャを使ってそれを補うことができます。動的ページには、データインターフェイスメソッド(大規模なプロジェクトも含めて、最初のmemcachedがデプロイされていないため、1データベースあたり1日に9000万件のクエリを処理するため)を含むpvの総数に数えられない大きなプロジェクトがいくつかあります。 私のデータベースサーバー全体の平均負荷は約0.5-1です。

MyISAMとInnoDBの最適化:

Key_buffer_size – これはMyISAMテーブルにとって非常に重要です。 MyISAMテーブルを使用している場合は、使用可能なメモリの30〜40%に設定することができます。 合理的な値は、インデックスのサイズ、データ量、および負荷を覚えているため、オペレーティングシステムのキャッシュを使用してデータをキャッシュするため、メモリが必要です。 それでも、常にすべてのkey_buffersが使用されているかどうかを確認する必要があります.MYIファイルは1GBのみで、key_bufferは4GBに設定されています。 それはあまりにも無駄です。 めったにMyISAMテーブルを使用しない場合は、ディスクに与えられた一時テーブルインデックスを格納するために、key_buffer_sizeを16-32MB以下に保ちます。

Innodb_buffer_pool_size – これはInnodbテーブルにとって非常に重要です。 InnodbはMyISAMテーブルよりもバッファリングに敏感です。 MyISAMはデフォルトのkey_buffer_size設定で実行できますが、Innodbはデフォルトのinnodb_buffer_pool_size設定でカタツムリのようです。 Innodbはデータとインデックスの両方をキャッシュするので、オペレーティングシステム用にあまりにも多くのメモリを残す必要はないので、Innodbだけが必要な場合は、使用可能なメモリの70〜80%まで設定することができます。 key_bufferに適用される規則のいくつかは、データ量が少なくても増加しない場合、innodb_buffer_pool_sizeを大き過ぎるように設定する必要はありません。

Innodb_additional_pool_size – このオプションは、少なくともオペレーティングシステム上では、ほとんどのメモリを割り当てて、パフォーマンスにほとんど影響を与えません。 しかし、それでも20MB(またはそれ以上)に設定したい場合は、Innodbが割り当てるメモリ量を調べる必要があります。

Innodb_log_file_sizeは、書き込み負荷が高い場合、特に大きなデータセットの場合に重要です。 値が大きいほどパフォーマンスは向上しますが、リカバリ時間が長くなる可能性があることに注意してください。 私はしばしばそれをサーバのサイズに応じて64-512MBに設定します。

Innodb_log_buffer_sizeデフォルトの設定は中強度の書き込み負荷と短いトランザクションで、サーバーのパフォーマンスは良好です。 更新操作にピークがあるか、負荷が大きい場合は、その値を増やすことを検討する必要があります。 値を高く設定しすぎると、メモリが浪費される可能性があります.1秒ごとにリフレッシュされるため、1秒以上必要なメモリ容量を設定する必要はありません。 通常は8〜16MBで十分です。 システムが小さくなればなるほど、その値は小さくなります。

Innodb_flush_logs_at_trx_commit InnodbはMyISAMと比べて1000倍も遅いですか? このパラメータを変更するのを忘れたようです。 デフォルト値は1です。これは、各コミット更新トランザクション(または各トランザクション外の文)がディスクにフラッシュされることを意味します。これは、特にバッテリスペアキャッシュがない場合には、かなりリソースを消費します。 多くのアプリケーション、特にMyISAMから変更されたアプリケーションの値は2に設定されています。つまり、ログをディスクにフラッシュせず、オペレーティングシステムのキャッシュにのみフラッシュします。 ログは毎秒ディスクにフラッシュされるため、通常1秒あたり1-2回の更新が失われることはありません。 0に設定すると、はるかに高速ですが、MySQLサーバがクラッシュしたときに失われるトランザクションも比較的安全ではありません。 2に設定すると、失われたトランザクションの一部がオペレーティングシステムのキャッシュに転送されます。

Table_cache – テーブルを開く際のオーバーヘッドが大きくなる可能性があります。 たとえば、MyISAMは、テーブルが使用されているときにMYIファイルヘッダーをマークします。 あなたは確かにこの種の操作を頻繁にしたくないので、通常は開いているテーブルのキャッシュを最大にするためにキャッシュの数を増やす必要があります。 オペレーティングシステムとメモリのリソースが必要ですが、現在のハードウェア構成では問題ありません。 テーブルが200を超える場合は1024に設定するのが適切です(各スレッドはテーブルを開く必要があります)。接続数が多い場合は値を増やしてください。 私は状況が10万に設定されているのを見ました。

Thread_cache – 各スレッドが接続/切断されているため、スレッドの作成と破棄のオーバーヘッドが大きくなる可能性があります。 私は通常、少なくとも16に設定します。 アプリケーションに多数のジャンプ同時接続があり、Threads_Createdの値が大きい場合は、その値を増やします。 その目的は、通常の操作で新しいスレッドを作成する必要性を排除することです。

Query_cache – アプリケーションに大量の読み取りがあり、アプリケーションレベルのキャッシュがない場合に便利です。 大きすぎると設定しないでください。これを維持するためにオーバーヘッドが必要となるため、MySQLが遅くなる可能性があります。 通常は32-512Mbに設定されます。 それを設定した後、しばらくそれを追跡して、それが機能するかどうかを確認するのが最善です。 一定の負荷圧力で、キャッシュヒット率が低すぎる場合は、有効にします。

Sort_buffer_size – 単純なクエリしかない場合は、64GBのメモリがあっても値を増やす必要はありません。 そうしないと、パフォーマンスが低下する可能性があります。


1 Star2 Stars3 Stars4 Stars5 Stars (まだ評価されていません)
Loading...
      この投稿は審査処理中  | 元のサイトへ