2014年3月12日水曜日

レビューのためにMySQLのダウンタイムやその他のステータス変数の計画

Original post: http://anothermysqldba.blogspot.com/2014/03/planning-mysql-downtime-and-other.html

我々は、すべての中にMySQLが安定しており、再起動することなく、非常に長い時間実行できることを知っている。 時々、我々はいくつかの変数を調整したりもアップグレードのためにそれを再起動する必要があります。 いくつかは彼らのユーザが眠っているので、一晩これを実行するのに最適な時期であることを前提としてい可能性があります。 しかし、多くの場合、一晩もバックアップと異なるデータマイニング等を行うことができ、他のcrontab関連のスクリプトが含まれてい

それでは、どのようにして、サーバー上で最も活動があるときに指針を得ることができますか? 今、各アプリケーションとデータベースが異なるため、異なる時間枠の間に、実行されている元関連活動に考慮するための要件は。 あ なたが "THREADS_CONNECTED「ステータス変数に5から10分毎分を記録するために開始した場合は、再度、これはあなたのシステムが時間は大丈夫 かもしれませんしたら、すぐにあなたのログインにわたって異なるMySQL接続の量を収集し、時間でロードされた方法によって異なりますフレーム。

これは、多数の方法で行うことができる。 それは、すでに多くの企業レベルのツールで提供され、あなたはスクリプトやなどを書くことができますが、ちょうどMySQLでそれを維持する。 私はこの単純な例のイベントやルーチンを使用します。

簡単な表を作成します。

CREATE TABLE `threads_count` (
`threads_count_id` int(11) NOT NULL AUTO_INCREMENT,
`variable_value` varchar(255) DEFAULT NULL,
`time_recorded` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`threads_count_id`)
) ENGINE=InnoDB;

簡単なルーチンを作成します。

delimiter //
CREATE PROCEDURE threads_tally()
BEGIN
INSERT INTO threads_count SELECT NULL , VARIABLE_VALUE , NOW() FROM information_schema.GLOBAL_STATUS WHERE VARIABLE_NAME IN ('Threads_connected');
END//
delimiter ;

単純なイベントを作成します。

SET GLOBAL event_scheduler = ON;
CREATE EVENT `threads_tally`
ON SCHEDULE EVERY 5 MINUTE
DISABLE ON SLAVE
COMMENT 'keeps a count of Threads_connected'
DO
CALL threads_tally();
DELIMITER ;

今が、上記の例を実装するには、あなたが(おそらくグラフに置くか、または単にレビューのため)から値を選択することができ、テーブルを持つことになりますので、接続数が最も少ないが、サーバー上に存在していたとき、あなたが見ることができます。 アプリケーションやトラフィックに応じて、十分な長さの有効な視点を得るし、イベントを無効にするには実行している、これを維持することができます。

select variable_value , time_recorded FROM threads_count;

今、あなたはもちろん、企業のツールを持っていない場合は、さらに一歩これを取るし、レビューのために自分のステータス変数をすべてのログを保存することができます。

値については、表:

CREATE TABLE `status_review` (
`status_review_id` int(11) NOT NULL AUTO_INCREMENT,
`variable_name` varchar(255) DEFAULT NULL,
`variable_value` varchar(255) DEFAULT NULL,
`time_recorded` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`status_review_id`)
) ENGINE=InnoDB;

値を収集するためのルーチン:

delimiter //
CREATE PROCEDURE status_reviews()
BEGIN
INSERT INTO status_review SELECT NULL , VARIABLE_NAME, VARIABLE_VALUE , NOW() FROM information_schema.GLOBAL_STATUS;
END//
delimiter ;

日常的に実行するイベント:

SET GLOBAL event_scheduler = ON;
CREATE EVENT `status_reviews`
ON SCHEDULE EVERY 1 HOUR
DISABLE ON SLAVE
COMMENT 'keeps a eye on status values'
DO
CALL status_reviews();
DELIMITER ;

あなただけのレビューのために、特定の変数名と値をお勧めしますし、それに応じてルーチンの中でクエリを調整することができます。 実行時間がニーズに依存している、私は、この例では時間を使った。

このコースのそれは時間をかけてこれらのテーブルのうち、関連するいくつかのクリーニングが必要な場合がありますので、もし時間をかけて多くの情報を生成しようとして。 それはすべてあなたがログインして提供された情報を確認する頻度に依存します。

あなたが使用しているため、データの増加、システムの値の多くの着実な増加が表示されている間も、データ内のデータのスパイクを特定し、アプリケーションやシステムの使用にそれを関連付けることができるようになります。

例えばMySQLの企業は、すでにあなたのためにこの種の情報のすべてをグラフ化しますが、これはあなたにも、データの少しの時間と見直しとそれを自分で行うことができる方法です。