tombo2-progress’s diary

できるだけ毎日1時間を切り取ってここに晒す。誤字脱字気にしない。日本語が崩壊するのも気にしない。最終的にまとめて本ブログに書く

2018-01-01から1年間の記事一覧

一回途絶えたらすっかり週間がなくなっていた

完全に書くのを忘れていた。 書いていく。 - performance_schemaのinstrumentsを分類ごとに有効化無効化した場合の調査 - query_rewriteプラグイン使ってみる などしていた。 それぞれ本ブログに書くのでそっちで。

詳解MySQL5.7, 3章読んだ

当然今日1時間の分ではないが、3章optimizerを読み終えた。 一通り読んだだけで、optimizer_traceの実験や3.5.4 サブクエリの実行計画の改善あたりはもう少し手を動かして見る必要がある。 optimizer_traceも実行計画が狂う件一通り追ったことはあるけど、結…

MySQLのプロトコル紹介の資料作り

作った。 結構怪しいところがあるけど、社内で発表の機会があるので、いずれどこかで。 まだステートもって処理できてないし、年内には終わらせないといい加減時間かけすぎてる。。。 プロジェクトは並行させずに短期間でどこまで完成度上げられるかが勝負だ…

詳解MySQL5.7 p48まで

疑問 repli_semi_syncの開始にmasterの再起動が必要ではないか? (p40あたり) dynamicに変更可能 https://dev.mysql.com/doc/refman/5.6/ja/server-system-variables.html#sysvar_rpl_semi_sync_master_enabled innodb_support_xa https://dev.mysql.com/doc…

詳解MySQL5.7 読書メモ

2. レプリケーション 調査 master thread確認 コードから? mysqldumpの--master-data=2及び他のオプションについて https://dev.mysql.com/doc/refman/5.6/ja/mysqldump.html#option_mysqldump_master-data default: 1 1: change master to ...ステートメン…

Transactional Information Systems続き

3.4 この節での我々のゴールはscheduleの正しさの判断(correctness criteria)を考案することである。 すべてのschedule, Sに対して、そうした判断σを以下のように考える。 このとき0, 1はfalse, trueをそれぞれ意味している。 従って、正しいスケジュール(co…

Transactional Information Systems続き(chap 3.3)

3.3 Syntax of Histories and Schedules この節ではschedulerがオンラインで正しいスケジューリングをどう判断するかを議論するにあたって、スケジュールの記法を明確にする。 P65下から9行目, Here we try to respect ... のrespectが訳せない。 まず、トラ…

Transactional 続き

細かくまとめていかないとまずい 3.1 Goal and Overview この章ではトランザクションのページモデルにおいて並行処理のcorrectnessについて議論する。 This study will reveal a variety of aspects: techniques for proving concurrency control algorithms…

MQRのベンチマークについて考えてた

パフォーマンス計測・改善を繰り返している。 効果が大きいけど検討が必要な部分をどうするかが問題 pcapレベルの話としてスナップショットの長さを固定、queryが取れる程度にする ether frame ~ tcpのpayload抜きで80byte前後、MySQL header (5byte) + クエ…

Transactional Information Systems再開

以前の続き、Chapter 2から読み始める。 今度の勉強会までにChapter5まで終わらないと行けないことを考えると一日5ページすすめることが必須だった、、、 p65まで読み終わったけど、p66のdefinition 3.1で詰まって厳しい。 このへんの記号と意味を調べ直さな…

CMU database続き

3の36分くらいまで。 先生テンション上がってきて早口過ぎてつらい。字幕もついてこないし、同じこと何度も言ってないでゆっくり丁寧に言ってほしいw どうにも時間がないので、1講義終わったらまとめ書く

CMU database講義その2とMySQLパケット解析の進捗

CMU講義 RDBにアクセスするときの基本、SQLの解説、殆どのRDB製品はANSI SQL92を基本としているけど、製品ごとに方言や仕様に沿ってない部分がかなりある。 ANSI SQLは2016まで来ているけど、これらに従っている製品は殆ど無いとのこと。 集計関数、window関…

CMUの講義見ていく

CMUのデータベースの講義(15-445/15-645, Fall 2018)を見ることにした。 Andy Pavlo Assistant Professor(助教)による授業でDatabaseの基本的な構成に関して説明し、後半はC++で実装もする様子。 今回は1回と2回を見てみた。2回目は目も取らずに聞いたの失敗…

そもそも高負荷のMySQLでパケットを完全にキャプチャできるのか?

tcpdumpでMySQLのserevr/client間のパケットをとろうとしてもdropped by kernelがちょいちょい出てしまう。 現状いろいろ工夫してもdropするときはdropするという状態で困っているが、ここまでやったことを整理しておく。 不要な名前解決をやめる -n, -nnで…

ステートを持つとしてどうパースするのか

ステートを持って、packetをパースすることにした。 server greetingを受けてるまでのip:portの組からのパケットは全部破棄するとして、ステートマシンは独自に作らないとならない。 実際MySQL serverがやるようにパースすればよいが、高負荷環境ではtcpdump…

deserializerのつづきとHAツール

HAツールどうにかしたい、とりあえずMHA見てるけど、perlはもういいんだよな、、、 deserializerは早くステート持つようにしないとならない。

benchmark取るとchannel使うのが厳しいのがわかる

チャネル使って並列ド上げつつredigo.Send多用して行きたいけど、パフォーマンス上がらん package main import ( "github.com/go-redis/redis" redigo "github.com/gomodule/redigo/redis" "runtime" "sync" "testing" ) var redisOpts = &redis.Options{ Ad…

パフォーマンス改善していく

fmt.Sprintfするのは%dとか書いてるあたりがおもそうということでstrconv.Itoa()で書いたらその部分が半分以下の時間でできるようになった。 redigoのredis.Do()を毎回呼ぶのは重いという話はわかって入るけど、どうしようか調査中 connection poolからコネ…

MQRのpprofとってみた

sysbenchで適当な負荷をかけてMQRのpprof, general_log, slow_log, tcpdumpをとってみた pprofの結果 (pprof) peek main ----------------------------------------------------------+------------- [16/90] flat flat% sum% cum cum% calls calls% + conte…

評価軸を考える

最終的に何を目指すか考えてみる クエリが再現できること 5.1以上でgeneral_logと比較して、全く同じクエリが取れることgeneral_logと同じ順序じゃなくて良い QPSが同等になること 実際のQPSを再現できること このツール自体がボトルネックにならないこと 2…

gopacketで取ったパケットを高速に処理したい

無限にgoroutine作られても困るので、goroutineの数を制御する Go言語でCPU数に応じて並列処理数を制限する | SOTA tcpdumpみたいにバッファリングしてくれないか。。。 FastHash()使うとload balancingできそう gopacket - GoDoc

MySQL server宛てのパケットからクエリをとる

connection poolingでコネクションが切れない状況でCOM_QUERYを取るのはステートを持ってパケットをパースする必用があるかと思ったけど、sequence_idはクエリごとにリセットされるようなので、sequence_id=0のものでcommand_typeがクエリのものを取れば良さ…

mysql, yumとかaptで入れられたのを確認する方法ないか

systemctlのserviceの場所 /usr/lib/systemd/ /etc/systemd/ /lib/systemd https://dev.mysql.com/doc/refman/8.0/en/binary-installation.html

dimStat, AWSで構築すると何故かhostが発見できない問題(pingは通る, MySQLへはつながる)が発生していて辛い。 ローカルのPCでやってもMySQLの情報だけ取れなかったりして、どうもおかしいくてつまってる

dimStatためしてる

本家の方の更新が滞りまくっているので、そちらに書く。

やはりステートレスは厳しい

com_queryやcom_stmt_prepaereくらいが取れればよいなら別として、deserializerとしてパケットを取ろうとするならステートレスにやるのは無理な気がする。 com_query_responseで結果セットのカラム数がcommand_typeが入るはずの5byte目に入ってきてしまうこ…

document合わない

MySQL :: MySQL Internals Manual :: 14.7.6 COM_STMT_EXECUTE のNULL-bitmap, length: (num-params+7)/8 の計算が合わないnum-params+7/8すると0になるしその後のtype of each parameter, length: num-params * 2 もこういうルールではないと思う

MySQLパケットが途切れる原因

MySQLのパケットが途切れる問題が合って、後続のパケットを見ても途切れたクエリの続きが入ってこなくて困っていた。 結論、tcpdumpの-sオプション(snapshotのサイズ)がCentos5.xでは96byteらしくこれが原因で切れていた。 なので、-s 0を追加してパケットが…

prepared_statementの投げ方とMySQLからの確認の仕方

以前書いたような気がするのだが、検索してもなかったので書く。 Prepared statementを使ってcom_stmt_prepareが流れるか見てみる。 結論:流れた。 実際のサービスでは使われないらしいがどうなのだろうか?prepareしてidとパラメータ指定の2往復になってし…

そろそろtcpdumpでやっていく

wiresharkでの絞り込みは良いとして、tcpdumpでファイル出力は以下。 tcpdump -nn -i any dst host <IP> and dst port 3306 -w <filename> ackパケットが大量に混ざり込むので、そのフィルタをどうにかしたい。</filename></ip>