MQRのベンチマークについて考えてた
パフォーマンス計測・改善を繰り返している。
効果が大きいけど検討が必要な部分をどうするかが問題
pcapレベルの話としてスナップショットの長さを固定、queryが取れる程度にする
ether frame ~ tcpのpayload抜きで80byte前後、MySQL header (5byte) + クエリ文字数+1 byte(00)分を取れれば良い。 クエリの長さは本当にアプリ次第で、where hoge not in (****) みたいなのがあると一瞬で長くなる可能性がある。 max_allowed_packet以下には収まるとはいえ長すぎる。1024くらいにできれば1万QPSくらい出てもpacket lostがないんだけど、難しいだろうか、、、 現状デフォ1024でオプション指定で可変にしている。
redis側のsorted setやめる
コネクションごとのクエリの順序をできるだけ守るためにredis側でコネクションをkeyとしてsorted_setでクエリや実行時刻を持っているんだけど、observer側で投げる順序が入れ替わることはまずない気がするからlistにしてどんどん突っ込んだほうがパフォーマンス的に良い気がする。
ほかにも改善したいところが多いけど、期限的に結構厳しい、、、 prepared_statement対応も進捗悪いしどうしたものか