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

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

アウトプットはいいぞ

この記事は「Qiita史上最多記録をつくろう!アウトプットはいいぞカレンダー Advent Calendar 2022」の23日目の記事です!空いていたので入れちゃいました! qiita.com カレンダーの概要を見てみる 本カレンダーはQiita主催カテゴリーにおける特別企画です。…

【Linux】100万ファイルくらいあるディレクトリのファイルのリストを高速に表示したい

概要 ファイル名のリストだけ高速に欲しいみたいな場合に大量にファイルがあるディレクトリでlsを打って返ってこないみたいなのが地味にストレスになったりするので高速に済ませる手段が無いかを調べてみた。 1ディレクトリに100万ファイル程度 計測前にecho…

1TBをネットワーク経由でコピーするのに5秒くらいで終わらせることは出来るのか

前説 この記事は「GMOペパボエンジニア Advent Calendar 2022」の23日目の記事です! adventar.org 目次 前説 目次 本編 要件整理 結論 なにはともあれボトルネック特定/改善をしてみる 家庭用サーバの場合 Disk性能を上げてみる ネットワーク性能を上げてみ…

【Linux】Open済みのファイルのパーミッションが変えられてもファイルへの書き込みは続けられる

この記事は「Linux Advent Calendar 2022」の21日目です!空いていたのでいれさせていただきました!!:waiwai: qiita.com 概要 タイトルが全てですがある一般ユーザで実行されているプロセスがwrite権限を持ってい状態でオープンしたファイルへは別ターミナ…

【MySQL】クライアントが死んだ後のMySQLの処理

mysql -e "select sleep(30)"とかやっておいてMySQL側はどういう処理をしているのかをstraceで見てみるメモ poll([{fd=41, events=POLLIN|POLLPRI}], 1, 0) = 1 ([{fd=41, revents=POLLIN}]) ioctl(41, FIONREAD, [0]) = 0 futex(0x1d8ff10, FUTEX_WAKE_PRIV…

【nginx】ソケットのキューのサイズを出力するMackerelプラグインを書いた

github.com LinuxのTCPは2段(netdevもあるので厳密には3段以上)のキューの仕組みがあります。クライアントがconnect(2)はサーバ側のOSがackを返した時点でconnect(2)は戻ります。この状態でサーバアプリケーションがaccept(2)を実行することでクライアントと…

【Linux】プロセス終了時のソケットを閉じる処理を見ていく

プロセスの終了はdo_exit関数で行われます。明示的にexitシステムコールを 呼び出したとき以外にも、シグナルを受けて死ぬときなどにも呼び出されます。 do_exit関数ではリソースの解放も行っており今回読みたいソケットを閉じる処理も呼び出していきます。…

【Go】[]byteを文字列として扱うならstring([]byte)よりもunsafe.Pointer()を使ったほうが早い

まとめ var tmp []byte // こうするより str := string([]byte) // こうした方がメモリコピーが発生しないので早い str := *(*string)(unsafe.Pointer(&tmp)) 本文 以下のような関数をベンチマークしたいときに使える話です。 package main import ( "os" "r…

【RDS】RDSでBlue/Greenデプロイ!すごい!!すごい!!!!(色々修正版)

qiita.com この記事は「MySQL Advent Calendar 2022」の20日目の記事です!前に書いたやつ(機能発表された数時間後に書いた)の加筆修正版になります! dev.classmethod.jp AWS re:Invent 2022で発表されていた機能。最初見た瞬間「???」となった。謎技術…

【Nginx】Rate Limitのexpireあたりの実装を眺めてみた

この記事は「nginx Advent Calendar 2022」の17日目の記事です。 ngx_http_limit_req_moduleを使うことでリミットの制限を行うことが出来る。ここで疑問に思ったがめちゃめちゃ大量にアクセス元があるサイトでこの実装をしたときどういうメモリの使い方をし…

ブラックフライデーで買ったもの

買ったもの紹介 TOSHIBA / 東芝 REGZA 48X8900L [48インチ] item.rakuten.co.jp 初めての有機ELテレビ。バラエティしか見ないので実はそこまで恩恵受けていない。 ハヤミ工産 自立スタンド item.rakuten.co.jp 初めてのスタンドテレビ台。壁との距離が縮まっ…

今年作ったMackerelプラグインを振り返る

この記事は「Mackerel Advent Calendar 2022」の9日目です!去年に引き続き今年も作ったもの紹介をしてみます! qiita.com 本編 github.com /proc/meminfoをパースして出してくれるツールです。1月1日に作ったみたいでMackerelで開始した年だったようです。(…

【Nginx】epollとaccept thundering herdの話

この記事は「nginx Advent Calendar 2022」の6日目の記事です! qiita.com en.wikipedia.org nginxのアーキテクチャは親プロセス+子プロセスのアーキテクチャで子プロセス(以下ワーカプロセス)がクライアントとのやり取りを行っています。 初期化処理 親プロ…

【Lambda】Graviton2 プロセッサを使っても早く安くならないケースがあるかも知れない(Golangの場合)

この記事は「Go Advent Calendar 2022 3」の3日の記事です! qiita.com 前説 aws.amazon.com LambdaをGoを使って何かをしたいときにarm64 アーキテクチャを使うと早くて安くなるという情報を得ていたので調べてみた。 結論 CPUバウンドな処理じゃなければあ…

CNDT 2022に登壇してきた

qiita.com この記事は「SRE Advent Calendar 2022」の3日目の記事です! 本編 event.cloudnativedays.jp 参加してきた。1日目。オフラインイベントめっちゃ久々だった。最後に行ったのなんだろうと考えてみたら2019のOSCのFallが最後だったっぽい。このとき…

「Linuxプログラミングインタフェース」読書会を開催しました(現在も進行中)

前説 adventar.org この記事は「GMOペパボエンジニア Advent Calendar 2022」の3日目の記事です。アドカレが始まりました!もう1年が終わります!やばい!寒い!! 去年はRedisのコードリーディングを書いてましたが今年はLinuxネタです!(来週には実践Redis…

【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を…