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

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

スピンロックの思い出(?)

社内勉強会でスピンロックという単語が出てきてずっと前にユーザー空間アプリケーションでスピンロックを使おうとしてレビューで反対されたというのを思い出した。その時はDBMSなんかが排他制御にpthread_mutexを使わず、独自にユーザー空間のspinlockを実装…

【MySQL】先頭のレコードより前、末尾のレコードより後

show engine innodb statusのロックモニターに出てくる用語。 最大下限レコード(infimum record) 最小上限レコード(supremum record) 先頭レコードよりも前にある疑似レコードと、末尾レコードより後にある疑似レコードを意味する。「先頭レコードより前…

eBPFでPIDを取得

BCCのツールで直接取得 data.e_pid = bpf_get_current_pid_tgid(); 上位32ビット TGID 下位32ビット PID の64ビットを返り値で渡してくれるヘルパー関数 BCCでtask_struct構造体から取得する struct task_struct *task; task = (struct task_struct *)bpf_ge…

【MySQL】ギャップロックはデッドロックをするかもしれない

InnoDB のギャップロックは、「単に抑制的」です。つまり、ほかのトランザクションによるギャップへの挿入が停止されるだけです。したがって、ギャップ X ロックの効果はギャップ S ロックと同じです。 dev.mysql.com タイトル通りそのまま。SELECT ~ FOR UP…

Composer

Composerとは PHPのライブラリ管理ツールです。 ライブラリAを使用するためには、別のライブラリBを先にインストールする必要がある、なんてことがあります。 この時、ライブラリAはライブラリBに依存している、と言います。 Composerを使用することで依存関…

【MySQL】consistent readとか

consistent read トランザクション内での (locking read ではない) 読み取りは、そのトランザクション中はじめに read した時点のスナップショットを参照するような挙動になる スナップショットは全テーブル対象 (クエリしたテーブルのみではない) スナップ…

ペパボに入って1年が経った

ryuichi1208.hateblo.jp っていう記事を書いて一年が経った。これまでの経験上自分は対数関数的な成長を遂げるようなことが多くてそろそろ鈍化しそうなもんだが携わってるサービスですらしょっちゅう知らないことが判明したり学びだらけの環境。innodbとか1…

【Linux】open済みのファイルのフラグを見る

/proc/${PID}/fdinfo/${fd} で見ることができる。flagsはopenに指定できるフラグの値が設定されている。posでファイルオフセットも取得できるのは何かに使えそう?となった。(ファイルを先頭から読み込んで何かをするプログラムで途中で刺さって動かないみた…

【Nginx】proxy_ignore_client_abortの効果を考えてみる

nginx.org proxy_ignore_client_abortはデフォルト値がOFFの設定でONにすると以下のような動きになる。 クライアントが応答を待たずに接続を閉じたときに、プロキシされたサーバとの接続を閉じるかどうかを決定します。 これは何が嬉しいかというとリバース…

【MySQL】非ユニークなカラムのロックは広いかもしれない

非ユニークインデックスの場合は、等価条件であっても範囲条件に近いロックを取るという話。空振ってなくても思ったよりロック広い??ってなるケースとかはこれの可能性がありそう。ユニーク制約の付いていないカラムには同値を入れることができるため、現…

【MySQL】テーブルロック

テーブルのロック状態を確認する方法 テーブルのロック状態を確認するには、innodb_lock_waitsを確認することでロックされている状態を取得できます。 SELECT * FROM sys.innodb_lock_waits; テーブルのロック テーブルをロックするには、LOCK TABLES文を使…

【MySQL】ロックモニターのロックの内容ごとのメモ

プライマリインデックスに対する等価検索、空振り lock_mode X locks gap before rec select * from t1 where id = 5 for update; ------------ TRANSACTIONS ------------ Trx id counter 1957 Purge done for trx's n:o < 1939 undo n:o < 0 state: runnin…

【MySQL】よく使うpt-query-digestのオプション

www.percona.com よく使うやつ --group-by fingerprintとかでまとめたいときに使う。 --order-by query_timeとかlock_timeとかrows_examinedの合計でソートしたりができる その他 出力形式が色々あってワンライナーとかCIとかと組み合わせてなにかできそうと…

【MySQL】MySQL 5.7でsysスキーマにロック状態確認ができるビューがあった

qiita.com あるトランザクションのロックが他のトランザクションのロック獲得を待たせているみたいなのを引くにはinformation_schemaのLOCK関係のテーブルをJOINしていく必要があると思っていたが上記の記事を見ていくとsysにもっと便利にみれるビューがある…

【MySQL】 InnoDB Checkpoint Ageの監視

writeされたデータがメモリ上に持ったままでよいサイズというのが innodb_log_file_size。そしてまだディスクにフラッシュされていないデータ(dirty page)のサイズが Checkpoint Age になる。innodb_log_file_sizeというサイズを増やすとこのサイズが増えて…

【MySQL】MySQLのwrite処理メモ

SQLをパーシングします 操作対象となるデータページ単位でメモリー上のBuffer Poolに呼び出し データに操作を行い、そのページがDirty Pageに Redo Logに操作と操作対象テーターなど情報を書く Redo Logをハードディスクに書き込む Dirty Pageを(ハードディ…

【MySQL】MySQLでIndexの一覧をだす

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

寝室に作業スペースを作った

色々変えた。ケーブルどうしようってずっと悩んでる pic.twitter.com/qBT6ba3hAS— Ryuichi@Gurasan:|| (@ryuichi_1208) 2022年6月1日 念願だったスタンディングデスクを寝室に置いて寝室でも作業できるようにしてみた。仕事部屋と寝室とリビングで仕事できる…

buffer poolの用途などを調べるクエリ

SELECT page_type, COUNT(*) FROM information_schema.innodb_buffer_page GROUP BY 1;

pt-osc入門

github.com Percona社が公開しているRDBMSの運用のためのツールキットであるPercona Toolkitに含まれるツールのひとつ。Perlで書かれていて1万行くらいの大きめるCLIツール。処理の流れとかは以下の記事を参考に読んでみた。 developers.freee.co.jp スキー…

【MySQL】UNDOログとREDOログ

REDOログ 主にバックアップデータを最新のデータまで戻すために使われる。データベースが破損した時などに、データベースのリカバリしたりする UNDOログ 変更したデータを元に戻すために使われる。トランザクションをロールバックしたりする。

nginxが出してるnginxがブロッキング処理が苦手なことがわかりやすい図がめっちゃわかりやすかった。

これがめっちゃわかりやすかった。レジ打ち(ワーカー)がブロッキング処理を行うと倉庫まで荷物を取りに行って他のお客さんは処理が進まないよという意味。この辺の話って概念自体が難しかったりするがこういう喩えを使ってわかりやすく説明する技術がすごい…

EPOLLETでエッジトリガーとレベルトリガー

linuxjm.osdn.jp epoll イベント配送 (distribution) インターフェースは、 エッジトリガー (ET) としてもレベルトリガー (LT) としても動作させることができる。 と書いてあるがレベルトリガーとエッジトリガーをあまり意識して理解したことがなかったので…

nginxのログの書き込みでディスクが異常とかだとworkerが死ぬかもしれない

nginxはログの書き込みはworkerがwrite(2)を最終的に発行している。基本的にはメモリへの書き込みだけなので詰まることは無いがネットワークファイルシステムを通した先立ったりディスク異常で刺さるみたいなケースだとnginxが停止してしまう。 github.com a…

【MySQL】ファイル毎のIO量を見たりする

# クエリ毎に現在実行されているイベントを表示 SELECT EVENT_NAME,TIMER_WAIT,SQL_TEXT,LOCK_TIME,NO_INDEX_USED,SOURCE FROM performance_schema.events_statements_current; # ファイル毎のIO量など見る SELECT * FROM file_summary_by_instance WHERE co…

GWが終わってしまった(2022)

ゴールデンウィークが終わってしまった。何をしてたかを振り返ると2日に1回のペースで繁華街に出向いてはお酒を飲んでを繰り返していただけで終わった。小中高大のそれぞれの友人が久々に宮城に帰ってくるみたいな感じでそれはそれで楽しかった(ダイエット中…

CでL2のペイロードを覗き見(wi)

概要 EtherフレームはOSI参照モデルのレイヤー2に位置します。 直接通信する機器間でデータをやり取りする為の情報が入ったフレームです。 この記事ではC言語によるEtherフレームの解析を行い、Etherフレームについて理解を深めてみます。 環境構築 CentOSを…

おうちクラスタにNodeLocal DNSキャッシュを入れた

kubernetes.io

【curl】7.83.0が来てた

curl.se curl: add --no-clobber curl: add --remove-on-error というオプションが追加されていた。一つ目はローカルfsにファイルが存在する場合は上書きしなくするようなオプションで2つ目はダウンロードが失敗したときに中途半端なファイルを削除してくれ…

【Redis】7.0.0が来てた

github.com 来てた。 www.phoronix.com 目玉機能は特にみていないけど大幅な最適化が働くみたいなのはみてたのでその辺を試してみようかな。 redis 7.0.0 is now available in asdf! Run `asdf install redis 7.0.0` to install it.— asdf-vm (@_asdf_vm) 2…