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

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

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

【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回の問い合わせはオーバーヘッドでしか無…

【Go】LookupHostを使って名前解決しようとするとAとAAAAの2回クエリが飛ぶ

r := net.Resolver{} ip, err = r.LookupHost(context.Background(), "google.com") みたいな感じで名前解決をしようとするとAとAAAAの2回クエリが飛ぶので追ってみた。最初は以下が呼ばれる。読むのは2ファイルのみsrc/net/dnsclient_unix.go func (r *Reso…

【PowerDNS】パフォーマンスに効きそうなチューニング

receiver-threads ワーカー数。デフォルト1なので増やさない手はない。CPU数くらいにしておく distributor-threads PowerDNSのバックエンドとのやり取りに使うスレッド数。デフォルトは3なのでIOバウンドなら増やしておくと良さそう。memcachedとかを同一の…

【MySQL】metadatalock

あるトランザクションで触っている最中のテーブルにDDLを発行するとmetadataロック待ちが発生する。以降のmetadataロック待ちのテーブルへのDMLは全て最初のトランザクションが終わるのを待ち続けるという話。 トランザクション1 DML insert mysql> desc tex…

【MySQL】Barracudaのメモ

Barracudaとは innodbのファイルフォーマットの一つ。MySQL 5.1のInnoDB Plugin時代からある圧縮方法 8.0からはデフォルトになる 通常は非圧縮ページがそのままストレージに保存される この機能を使うと圧縮ページを作成しストレージに保存することによって…

mysql 透過的ページ圧縮

透過的ページ圧縮の使い方 テーブル作成時、以下のように、「COMPRESSIONオプション」を付ける。圧縮方式は「lz4」と「zlib」 CREATE TABLE テーブル名 (テーブル列定義など) ENGINE InnoDB COMPRESSION='圧縮方式'; engineers.weddingpark.co.jp