MySQLの起動/停止


8

次のコマンドラインを実行するとどうなるかを理解するための助けを求めています。

root@prodn$ service mysqld stop

はい、それはMySQLサーバーをシャットダウンするので、サービスが再開されるまで、そのサーバーへのアクセスは利用できなくなります。しかし、より具体的には、サービスが停止したときに何か他に起こることはありますか?ここで私の初心者を許しますが、mysqldが再起動すると、ログがフラッシュされた、一部のメモリが解放された、キャッシュが空になったなどのことを意味しますか?

私が尋ねる理由は次のとおりです:

私たちのデータウェアハウスDBはMySQL DBであり、過去4か月で、平均8.5時間かかりました。

先週の水曜日に、mysqlサービスを停止し、30分後に再起動しました。それ以来、全体的なパフォーマンスの大幅な改善に気づき始めました。SELECT/ INSERT / UPDATE / DELETEプロセスの方が効率的でした。DWは同じ数のデータ行でほぼ4時間早く終了しました

ただし、1日が経過するごとに、終了時間に15〜20分が追加されます。だから、私は毎週サービスを再開する必要があるのではないかと思います。

この動作の説明はありますか?関連する他の質問はわかりませんが、mysqldサービスの再起動時に何が起こるかを知ることはすばらしいでしょう。

誰かこれに光を当てることができますか?


1
serverfaultまたはdbaで質問してみてください。
gbjbaanb 2013


1
コミットされたメモリに大量のデータがあるようですね。dev.mysql.com/doc/refman/5.0/en/server-shutdown.html
ethrbunny

@ dat789、答えを探すための正しい場所はすでにethrbunnyによって与えられています。それはあなたがそれを見つけるために行く最初の場所だ。
Mrigesh Raj Shrestha 2013

回答:


2

を発行するservice mysql stopと、DB接続を切断するだけでなく、さらに多くのことが起こります。@ethrbunnyからのコメントのリンクは、何が起こるかについて既に説明しています。

1つの特定の側面に焦点を当てたいと思います:InnoDBバッファープール。InnoDBは、InnoDBバッファープールのダーティページをフラッシュする必要があります。どれだけ知りたい場合は、シャットダウンする前にこれを実行してください:

SELECT CONCAT(dpbytes/power(1024,expo),' ',SUBSTR(units,expo*2+1,2)) DirtyPages FROM
(SELECT dpbytes,FLOOR(LOG(dpbytes)/LOG(1024)) expo FROM
(SELECT dirty_pages*page_size dpbytes FROM
(SELECT VARIABLE_VALUE dirty_pages FROM information_schema.global_status
WHERE VARIABLE_NAME='Innodb_buffer_pool_pages_dirty') AAA,
(SELECT VARIABLE_VALUE page_size FROM information_schema.global_status
WHERE VARIABLE_NAME='Innodb_page_size') BBB) AA) A,(SELECT ' BKBMBGBTB' units) B;

これにより、InnoDBバッファープールからフラッシュする必要があるデータの量がわかります。

InnoDBのシステムテーブルスペース(ファイルibdata1)には多くの可動部分があることに注意してください。InnoDBインフラストラクチャ全体の図解を表示するには、ここをクリックしてください

トランザクション情報の一部は、実行時にクラッシュリカバリが実行されるように記述されていますservice mysql start

オプション

これを実行することにより、すべてのデータをフラッシュし、すべてのトランザクションをibdata1およびトランザクションログ(ib_logfile0ib_logfile1)から完全にコミットできます。

SET GLOBAL innodb_fast_shutdown = 0;

走る前に

service mysql stop

試してみる !!!

更新2013-04-24 07:17 EDT

MyISAMをメインストレージエンジンとして使用しているため、発生している唯一のことは、.MYI変更が保留されているすべてのファイルへのインデックス変更のフラッシュです。

また、次にmysqldをシャットダウンし、別のセッションで事前にこれを実行することをお勧めします。

tail -f /var/log/mysqld.log

通り過ぎるメッセージを見て、それがmysqldがストレージエンジンで何をしているのかを教えてくれます。使用中のInnoDBテーブルがまったくない場合は、InnoDBを無効にすることを検討する必要があります。

[mysqld]
skip-innodb

これにより、起動が速くなり、シャットダウンが速くなる可能性があります。


これをありがとう。私は言及しなかった他の1つの側面についてより具体的だったはずです- ほとんどのテーブルでMyISAMエンジンを使用しています。これはInnoDBと比較して違いがありますか? mysqldを再起動せずに同じことを行う方法はありますか?そうでない場合、これは私が時々私たちのシステム管理者を困らせる必要があることを意味します。また、理由はかなり単純です。最後の再起動から1日が経過するたびに、SELECT / UPDATE / INSERT操作が25〜40分遅れるようです。再起動すると、「最適化」された時間に戻ります。理由は説明できません。
dat789 2013

InnoDBはすでに無効にされていると強く信じています。抽出を参照してください:130422 15:35:31 mysqld_safe / srv / mysqldb / mysql 130422 15:35:33からのデータベースを使用したmysqldデーモンの起動[注]プラグイン「FEDERATED」は無効になっています。130422 15:35:33 [注意]プラグイン 'InnoDB'が無効になっています。130422 15:35:33 [注]イベントスケジューラ:ロードされた0イベント130422 15:35:33 [注] / usr / libexec / mysqld:接続の準備ができました。バージョン: '5.5.17'ソケット: '/srv/mysqldb/mysql/mysql.sock'ポート:3306 MySQL Community Server(GPL)次に、再起動せずにすべての.MYIにインデックスの変更をフラッシュする方法を教えてください。可能?
dat789 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.