質問

私はAWS上で実行されているMySQLインスタンスがあり、1秒あたり約5000インサート。BINLOG(行)とBINLOG TAILERを使用している場合は、パフォーマンスの影響がどのようなものになるのかという考え任意の考えですか?

このリンクをチェック

私の理解から、「リアルタイム」データ接続を可能にするために、BINログテーラは定期的にMySQL BINLOGをポーリングします。Binlog TailerはNodeJSで実行されます。

ポイントは、MySQLを使用しなければならず、メタルを使用してデータをリアルタイムでクライアントに入手したいです。したがって、このBinlog Teailerを使用するという私の考え。

MySQL DBは非常に集中的に満たされるつもりです(毎秒5000インサート)、どの時点でBINLOG / BINLOG TAILERが厳しいパフォーマンスの問題を獲得するかを知りたいです。

GRTS、TOM

役に立ちましたか?

解決

私は同様の機能を持つソフトウェアを開発しました。

これは私がパフォーマンスに関して行ったいくつかの観察をしています。幸いなことに、潜在的なホットスポットは互いにほとんど独立しています。

私はあなたが引用したノードパッケージに不慣れであるので、彼らは実際にはポーリングを介してビンログを「尾をつける」ではなく、実際にスレーブ/レプリカをエミュレートしているという彼らのコードを与えられたばかりであることを想定します。サーバーとマスターへの接続とレプリケーションストリームを要求します。

最初の潜在的なボトルネックは、必要なBINLOGデータの量を記述するマスターの能力です(I / OスループットはプライマリCOBSTRIANTです)。マスターが既にROWフォーマットにログインしている場合、この問題はすでに解決されています。そうでない場合は、Binlogフォーマットを切り替えて参照してください。 i ROWフォーマットは、クエリが悪い場合やアプリケーションがそれが持ってはいけないデータに何かをするときにデータの回復に非常に役立ちます。削除が発生した場合(たとえば)削除されたデータは実際にバイナリログに書き込まれたときに、デフォルトの設定で(3番目のパーティ製のツールを使用) - デフォルト設定では可能です。

リソース消費のポイントは、そのようなツールによってマスターに行われたスレーブ接続であり、マスターはデータをプッシュします。一般的な誤解は、スレーブがマスターを「ポーリング」することです。実際、スレーブは接続を開始しますが、マスターはデータをプッシュします。これは実際には、接続されているスレーブの数が小さいときにパフォーマンスへの影響がほとんどありません(SAT、5以下)。この負荷は、「Binlog Tailer」をマスターにしていないが、log_slave_updatesが構成されたマスターの既存のスレーブには、マスターから除外できます。

マスターから疑似スレーブへのデータの転送は重要なネットワーク帯域幅を扱うことができるため、この帯域幅を減らすために外部ユーティリティをサポートしてMySQLクライアント/サーバ圧縮プロトコルをサポートする必要があります。この機能を有効にすると、ペイロードに応じて10:1の圧縮比が達成できます。

最終的な痛みの点は、外部のユーティリティ自体です。 MySQL BINLOG形式は、非常に厳密にパックされたバイナリ形式(したがって「バイナリログ」)で、解析および復号化が必要です。外部ユーティリティがこのデータストリームを解凍して操作することができる効率は、この要素には非効率的なコードがさらに遅れているため、検出されたイベントが検出されたイベントが発信される可能性があるかを決定します。マスターサーバー自体にパフォーマンスの影響を与えません。

短い、あなたのマスターがあなたが期待するトラフィックの量の行フォーマットのbinlogsを生成するワークロードを処理できるならば、潜在的な問題の残りの問題は依然として潜在的な問題ですが、それらはマスターサーバーに意味のあるパフォーマンスへの影響を持たないはずです。 、それ自体。

ライセンス: CC-BY-SA帰属
所属していません dba.stackexchange
scroll top