ラベル tips の投稿を表示しています。 すべての投稿を表示
ラベル tips の投稿を表示しています。 すべての投稿を表示

2014年4月4日金曜日

MySQLの説明&SQL_NO_CACHE

Original post: http://anothermysqldba.blogspot.com/2014/04/mysql-explain-sqlnocache.html

だから、今日私は彼らのデータベースのパフォーマンスを持つ人を支援し、いくつかの下手に書かれたクエリに出会った。 今、確かに誰もが目標は、それらを避けるためにあなたができることはすべて行うことです、ミスをする。

つまり、あなたの環境に緩いクエリを聞かせて前にすべき役立つヒントだけのカップル。

常に最初に説明を経由してクエリを実行します。 最初の説明何のような単純なものは、(それが実行されませんので)全くタイプミスを確認せず、クエリを最適化できるようになります。
いくつかのリンクは、すでに説明しての使用方法については存在します。
目標は単純です。 あなたがでpossible_keysとキー(nullではない)での有効なキーをしたいし、それがkey_lenにに来るときには、すべてのテーブルは、行の100Sにしたくない。 あなたが最初にkey_lenには200(私が例として取り上げただ数)であることが得ることができる場合、以下のは5,4,3,2,1としない別の200であることが、あなたのクエリでは、よく実行する必要があります。 それは非常に単純化し、高レベルの文であると私はあなたが詳しく説明し理解することが記載されているハイパーリンクを参考することができます。 今日見たクエリは、5 +が参加し、すべてのkey_lenにサブセレクト(参加を通じてどこ声明の中で優れていた)と200 +の行がありました。 いくつかの調整はあなたのクエリが1秒以下に200秒からドロップできるようにすることができます。 いつも、いつも、いつも説明しますか。

次のヒントは、SQL_NO_CACHEを使用してクエリをテストしてみてください。 これは、実際のクエリをテストし、それをあなたができる最善の方法を最適化することができます。 それは(それがになる場合)、キャッシュされたとなったら、それはあなたのためだけに、そのはるかに高速に実行されます。
最後の注意...一度フォージサイトに存在していたが、今であるMySQLのSQLパフォーマンスのヒントを見てみましょう- https://wikis.oracle.com/pages/viewpage.action?pageId=27263381

2014年1月20日月曜日

MySQLのレプリケーションは追いつくことができます

Original post: http://anothermysqldba.blogspot.com/2014/01/can-mysql-replication-catch-up.html

だから、複製は、最近のMySQL 5.6で改善された。 しかし、人々はまだ5.1および5.5を使用しているので、それらの改善点のいくつかは、現実の世界をヒットするのを待つ必要があります。

私は最近、地理位置レプリケーションソリューションでこの方向に移動しました。 国の一部は、MySQL 5.1のサーバを持っていたし、国の他の部分は、新しいMySQL 5.6サーバがインストールされていた。

(控えめに言っても、数時間かかった)セカンダリサーバにプライマリから初期データのバックアップを取得する問題に対処した後、私は追いつくの複製とついていく可能性が決めなければならなかった。 プライマリサーバはいくつかの大きなクエリを持っていたし、最適化が常に起動するには良い場所です。 私は、セカンダリサーバが引っ張って速く私も最初にできる限り適用しなければならなかった。

だからここにチェックして、レプリケーションになると心に留めておくべきいくつかあります。 私はこの上で働いていたように私の思考のための支援を、以下のいくつかのリンクを追加した。

レプリケーションは非常にI / Oの重いことができます。 アプリケーションによっては。 ブ ログサイトでは、多くの書き込みがレプリケーションのI / Oに光であることはありませんが、頻繁に書かれており、更新されたプライマリサーバは、それらが有効になっている場合relay_logsと binary_logsをたくさん書いてReplication Serverにつながるとしている。 バイナリログには、バックアップを実行するか、このサーバが他の人にプライマリにするかもしれない可能にするために、セカンダリ上で有効にすることができます。

私は、データディレクトリとは別のデータ·パーティションにログを分割します。
これは、my.cnfファイルに設定されているリレーログ-

InnoDBのバッファプールは既に10GB以上の値に設定されました。 これは、このサーバーのたくさんいた。
サーバーは背後に90,000秒であった。

だから私は、サーバーにいくつかの調整を行うために開始され、最終的にはこれらの設定になってしまった。 付与されたすべてのサーバーが異なっている。

MySQLの>を@ sync_relay_log_info \ G
*************************** 1。 行***************************
@ @ sync_relay_log_info:0
セット内の1行(0.08秒)

MySQLの> @選択innodb_flush_log_at_trx_commit \ G
*************************** 1。 行***************************
@ @ innodb_flush_log_at_trx_commit:2
セット内の1行(0.00秒)

MySQLの> @選択log_slave_updates \ G
*************************** 1。 行***************************
@ @ log_slave_updates:0

MySQLの> @選択sync_binlog \ G
*************************** 1。 行***************************
@ @ sync_binlog:0
セット内の1行(0.00秒)

MySQLの> @選択max_relay_log_sizeを \ G
*************************** 1。 行***************************
@ @ max_relay_log_sizeを:268435456

私は、レプリケーション·キャッチアップを支援する様々な設定やオプションをモニターして、私はバイナリログがオフになっています。 それはしばらく時間がかかった。 私はこの時間枠内で働いていたとして、あなたは上記を参照の設定の一部は、または適用されていない場合があります。 まだそれは戻って0秒に追いつくでした。 今、あなたは、これらの設定の多くは、上記のバイナリログとその周辺関連していることに気づくかもしれません。 だから私は少しのテストを実行しました。 だから、私はビンログを再起動し、使用可能に。 私は後で、サーバー上でチェックインし、万秒以上の背後にそれを発見した。 だから私は、もう一度再起動し、binログを無効に。 これは、15分以内のプライマリサーバと(0秒の後ろ)に追いついた。 私はAurimas「使用ツールは 、私はそれは同様に追いつく見守る。 あなたが前にそれを使用していない場合、それは非常に素晴らしく、便利なツールです。

これは是非、プライマリサーバが、ACID準拠している必要がありますです。 このセットアップを使用すると、キャッシュ用のOSに依存し、クリーンアップしている。 これは、サーバーが他の人に情報を供給するための主リードサーバとして使用されている。 また、はい、地理位置レプリケーションがプライマリサーバで最新の状態に保つことができることを意味します。

あなたは、スレーブを停止する必要がある場合は、それはまだすぐに何を追いつくだろうか?

どのように、なぜあなたは、スレーブを停止しないのは、私の最初の反応である。 あなたが使用することの習慣を身に取得する必要があり、STOP SLAVE SQL_THREADを 、代わりに、STOP SLAVE ;これはリレーログがデータを収集し、ちょうどあなたのプライマリサーバに適用しないように続けることができます。 だから、それは後でリレーログを移入するのにかかる時間を短縮することを利用することができます。

あなたのためのいくつかの追加の読書: