oranie's blog

旧:iをgに変えると・・・なんだっけ・・・

Cassandraにslow query logがマージされた様なので、どれだけ待望されていたのか勝手に簡単な解説をする。

題名のままです。

ついにCassandraにslow query logがVer 3.10でマージされた様です。

[CASSANDRA-12403] Slow query detecting - ASF JIRA

で、今までなぜこれが無かったのかというのと、どれだけ素晴らしいかというのを簡単に解説したいと思います。英語の部分はすごいニュアンスだけで書いていたり正確に仕様や歴史や経緯を把握している訳では無いのであくまでも傍から見ていてCassandraを運用した思い出を持っているだけの人が書いているという認識でお願いします。間違っていたらコメントで指摘下さい。もしくはもっとちゃんとした解説ブログ書いて頂ければ幸いです。

まずslow query log自体の要望は普通にありました。まあデータストア運用する人間からしても、実際にクエリを発行するアプリを書く人からしても当然ですよね。

[CASSANDRA-1305] Slow query log - ASF JIRA

ただこの時はパフォーマンスの問題やtrace logを実装するので、大半の問題は解決出来るのでは?という議論で完結している模様です。

[CASSANDRA-1123] Allow tracing query details - ASF JIRA

で、じゃあtrace logがslow query logの代替手段になるかと言うと、これはSQLで言うとEXPLAINに相当する機能となります。その為、「このクエリに問題がある」と分かっている時はCassandraのどのステージでどれだけ遅いのかが分かるのですが、「なんらかのパフォーマンス障害があった場合にどのクエリが問題だったか」という特定には不向きです。

で、月日は流れまたもJIRAに要望が上がっています。僕もこの辺の時期に運用に携わっていたので、このチケットは良く見た記憶があります。やっぱ欲しいですよね。

[CASSANDRA-6226] Slow query log - ASF JIRA

で、この時のDataStax co-founder and project chair for Apache Cassandra.であるJonathan Ellis氏の回答は凄くわかりやすく

「Tracing works fine at 0.1% or similar.(traceで同じような事出来るよ)」 注:trace logはsamplingでクエリの内何%かを拾い結果を出力する為、全てのクエリが等しく平均的に投げられていたら確かに彼の言うことも分かる。ただ、実際の運用では100万件のクエリの内数件のクエリのせいで著しくパフォーマンスに影響を及ぼしていた場合にサンプリングだと漏れてしまう懸念を僕も持っていたし、おそらくこのリクエストを書いた人も同じだったでしょう。

で、そうこうしているとクライアント側で使うJavaのdriver側でslow query logの機能が入った模様です。

https://datastax-oss.atlassian.net/browse/JAVA-646

とりあえずこれで安心ですね(ニッコリ ただ、このドライバを使わないと結局自分でslow query log相当を実装必要があるのと、今取りたい!みたいになった時にアプリ側全部で設定を動的にONに出来るようにしないといけない気がします。この辺は使った事が無いので想像で書いています。あとはNWの影響を受けた場合に「クエリが悪いのかそれとも他のレイヤの問題でレスポンスが遅くなったのか」も切り分けがやっぱり微妙になるので、Cassandraノード側でslow query logはやっぱり欲しいですよね。

で、冒頭に書いたJIRAに行き着く訳です。

JIRAの中を見てみるとShogo Hoshiiさんという方がコミットしており、おそらく

www.db-tech-showcase.com

にて発表をされたヤフー株式会社の星井 祥吾さんであると思います(間違っていたらほんとすみません。)非常にタフなやりとりがCommentsからも垣間見れます。運用していた時期にたまたまカンファレンスで発表する機会を貰えた時に「slow query log欲しいー」ってだけ言って結局正式なrequestやpatchも書かなかった僕とは大違いですね。

最後に念のため書いておくと、このブログを書くためにググってみたらDSEではVer 4.5にてslow query logの機能は実装されていた模様です。

docs.datastax.com

ただし、Cassandra本体に無い機能だという事からおそらくDSE内でなんらかのコンポーネントを組み合わせて実現したのではと推測しています。もしくは独自パッチでしょうか。

という訳で実際に読み返すと推測とかニュアンスばっかりで解説と言えるかどうか微妙なエントリですが、この機能は自分も運用時に待望していた機能でもありましたので、今Cassandraを運用している方はリリースされたらアップデートをする事により、より素晴らしいCassandra運用ライフを送れるのではないでしょうか。

全然経緯も仕様も違うぞ!!デマ流すんじゃねぇ!!!!という場合は是非ちゃんとした解説を書いて頂き僕に教えて頂ければ幸いです・・・。