地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【RDS】RDSでBlue/Greenデプロイ!すごい!!すごい!!!!

dev.classmethod.jp AWS re:Invent 2022で発表されていた機能。最初見た瞬間「???」となった。謎技術だすごい!!となった。 仕組み的な話 docs.aws.amazon.com 公式ですでに詳しく書かれている。とてもわかり易いのが下の図でコンソールをポチポチするだ…

【MySQL】RDSのアップデートで書き込みスループットが2倍になるケースを考えてみる

帰宅前に以下の記事を読んですごい!となったがジムのランニングマシン使用中に「2倍ってどうやったら行くん?」ってなったので調べた。 dev.classmethod.jp という機能がリリースされていた。中身自体はMySQLのDoublewrite Bufferの機能をオフにするという…

【ProxySQL】DBサーバがOSごと落ちた場合に起きうるユーザー影響の度合いを調べた

C++入門中で読みたかったので呼んでみた記事。 DBサーバが落ちた場合に切り離しまでにかかる時間 落ちた = OSごと通信不可となった場合とする。切り離しまでにかかる時間は概ね以下のように決まる shun_on_failures 1秒間あたりに失敗する接続の数の閾値。こ…

リトライ

mysql-query_retries_on_failure

CNDT 2022に参加してきた(1)

event.cloudnativedays.jp 参加してきた。1日目。オフラインイベントめっちゃ久々だった。最後に行ったのなんだろうと考えてみたら2019のOSCのFallが最後だったっぽい。このときはLT下記憶がある。これが2019の11月末なのでちょうど3年ぶり。すごい。 セッシ…

【SQL】INNNER JOINではWHERE区はJOINの前に実行されるかも知れない

要約 タイトルは間違っていてJOINより前に(論理的に)実行されることはない。SQLをオプティマイザが最適化する過程でWHEREで絞った状態でJOINされることがあるという話。 本題 qiita.com from テーブル指定 join テーブルの結合 where 条件指定 group by グル…

【Nginx】nginx upstream パッシブヘルスチェックのmax_failsは何を対象にカウントするのか

仕事でこのfailsは何をfailsとしてカウントしてるんだっけ?となったので調べった。 公式を読む。max_failsは指定された回数失敗するとupstreamから外されるということが書いてある。この失敗とは?についての言及はここには無い max_fails=number sets the …

【RDS】IOPSとスループットが思ってたのと違った数値が出たので調べた

RDSのiopsが1,000となっていればinnodb_page_sizeの数値をかけ合わせた数値がスループットになると思っていた。この例で言えば1,000[iops] * 16,384[byte] ≒ 16[MB]あたり。だがメトリクスを見るとwriteが多い時間帯はこのような計算式当てはめることが出来…

【MySQL】クラッシュリカバリのUndoフェーズでやること

MySQLのクラッシュリカバリでUndoフェーズ必要なのなんでだろ— Ryuichi@Gurasan:|| (@ryuichi_1208) 2022年11月6日 散歩中に疑問に思ったので調べた。クラッシュ時のシナリオとリカバリの時の脳内のダンプを書いておく TxA, begin レコードAをUpdate buffer …

【MySQL】バックグラウンドスレッドを調べる

SELECT THREAD_ID,NAME FROM performance_schema.threads where TYPE = 'background'; +-----------+----------------------------------------+ | THREAD_ID | NAME | +-----------+----------------------------------------+ | 1 | thread/sql/main | | 2…

MySQLでindexの一覧を出す

select table_schema,table_name,index_name,column_name,seq_in_index from information_schema.statistics

ロングトランザクションを見つける

cousmersとinstrumentsを有効化する UPDATE performance_schema.setup_instruments SET ENABLED = 'YES', TIMED = 'YES' WHERE NAME = 'transaction'; UPDATE performance_schema.setup_consumers SET ENABLED = 'YES' WHERE NAME = 'events_transactions_hi…

MySQLで計器を追加で有効化する

UPDATE performance_schema.setup_instruments SET ENABLED = 'YES', TIMED = 'YES' WHERE NAME LIKE 'memory/innodb/fts%' こうやれば有効化できる。ちなみに上記はmemoryなのでTIMEDは無視される SELECT * FROM performance_schema.setup_instruments wher…

最近作ったツールたち

GoにハマってるのでGoで色々小さいツールを書いていたので一気に紹介してみる エラーバジェットをMackerelで見るやつ github.com 指定したSLOの違反件数とエラーバジェットをいい感じに見れる。shimesabaというツールを参考に作ってみた。違いとしてはyamlな…

MySQLでクエリを投げずにトランザクションIDを振る

beginとかstart transactionしただけではmysqlだとトランザクションIDが振られる何らかのDMLを投げる必要がある。トランザクションの開始などを監視したいコードを書いてるときにこれは面倒だったので調べたらSTART TRANSACTIONにWITH CONSISTENT SNAPSHOTを…

(wip)MySQL NLJの計算量

qiita.com 上記にもあるようにNLJはO(MN)になる。

Mackerel用のエラーバジェットを計算するツールを書いた

github.com SLI/SLOを引数で指定するといい感じにタイムウィンドウからバジェットを計算してグラフ化してくれるツールを書いた。テスト全然書いてないのでこの後やっていく。

DRのパターン

DRのパターン バックアップ&リストア 定期的にバックアップを作成して遠隔地保管しておきます。 障害発生時にはバックアップからシステム復旧を行います。 パイロットライト 別の場所に低スペックのDBを起動してデータの同期を行います。 障害発生時には別…

【AWS】samconfig.toml の parameter_overrides は配列で指定可能

version = 0.1 [default] [default.deploy] [default.deploy.parameters] stack_name = "sam-app" s3_bucket = "aws-sam-cli-managed-default-samclisourcebucket-1ru428utn0xc6" s3_prefix = "sam-app" region = "ap-northeast-1" capabilities = "CAPABILI…

【Go】AWS SSMのパラメータストアから情報を取得する

複合までしてくれる package main import ( "fmt" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/ssm" ) func main() { sess, err := session.NewSessionWithOptions(session.Options{ Conf…

Cloud Watch LogsをGoから楽に使いたかったのでsdkを使ってみた

github.com 感想としてはクエリ周りの取り扱いがちょっとめんどいのでもう少し抽象化したものがあると良いのかもなぁと思った。

RDSでbinlog保存期間を変える

docs.aws.amazon.com デフォルト値は _NULL(バイナリログを保持しない)となっている。 call mysql.rds_set_configuration('binlog retention hours', 24); とすることで24時間分のbinlogを保存できるようになる。レプリカ作成などの作業をする際に使う。この…

スクリプトの絶対パスの取得

スクリプトの絶対パスの取得 SCRIPT_DIR=$(cd $(dirname $0); pwd)

Goでmysql

Go言語にはデフォルトでSQLやSQLライクなデータベースに接続するための インターフェースがデフォルトで用意されている。 http://golang.org/pkg/database/sql/ それに各DB用のドライバーを追加して、データベースに接続する go-sql-driver/mysql のインスト…

特定のローカルブランチをまとめて削除

$ git branch | grep branchname | xargs git branch -d $ git branch | grep -E regex | xargs git branch -d

【Go】aws-sdk-goでクレデンシャルファイルを使った認証

AWS_ACCESS_KEY_IDとAWS_ACCESS_KEYが設定されていなければ自動でクレデンシャルファイルを見に行く。profileの指定が必要なら以下のように書くことで指定が可能 profile_name := "profile_name" sess := session.Must(session.NewSessionWithOptions(sessio…

【Go】LambdaでRDS for MySQLのAuditログをいい感じにS3に置いてくれるやつを書いた

github.com いい感じになるやつ。書き終わってから気づいたけどlocalstackというのがS3互換でAPIが叩けるらしい。今度使ってみよう とりあえずやりたいことをやるにはLambdaが最大スペックでも6コア10GBで最長実行時間が15分というのが結構きついので前段にL…

【Go】パーセンタイルを出すライブラリを書いた

github.com 特定の操作をN回行った際のレイテンシーのMパーセンタイルを取得したいみたいなケースで使えそうかもと思って書いた。ログのレイテンシーとかから計測したり何かしらには使えそう。

【Go】sliceの型変換

キャストでいけるかと思ったがcannot convert s (type string) to type intとなる。rangeで回してあげてる必要がある。 func intToFloat64(i []int) []float64 { f := make([]float64, len(i)) for n := range i { f[n] = float64(i[n]) } return f }

【Go】DNSサーバに対して指定回数のクエリを投げてレイテンシを測るやつを書いた

github.com 100回投げて99番目に遅いレイテンシやavg timeやmin timeなんかをMackerelで可視化できるやつを書いた。ただ昨日書いた以下のような問題(ハッピーアイボールというらしい)があってやりたいことに対しては2回の問い合わせはオーバーヘッドでしか無…