RDS for MySQLのファーストタッチペナルティを解除する3ライナー

この記事の3ライナーはほぼ @yoku0825 によるものです。感謝。

RDS for MySQLのデータボリュームはEBSの技術を使っているため、スナップショットから復元を行うと初回のデータアクセス時にレイテンシの悪化が起こる。これは「ファーストタッチペナルティ」または「ファーストタッチレイテンシー」と呼ばれていて、AWSのドキュメントにも記載のある現象である。(Amazon EBS ボリュームの初期化 - Amazon Elastic Compute Cloud)

EC2+EBSの場合は、ddで触るといった方法でこれを解消することになるが、RDS for MySQLではもう少し複雑な作業が必要になる。

具体的には次の3つのことをしなければいけない。

primary keyをすべて読み込み secondary keyをすべて読み込む すべてのデータを読み込む

ファーストタッチペナルティの解除についてインターネットで探すと、「select count(*) from テーブル名 を全テーブルに打ちましょう」というのがよくでてくるが、これだけだとsecondary keyを読み込めてないので本番投入後に特定のSQLが最初だけ遅いという現象が起きうる。(MySQLの count(*) は実データに触るので、3番目のすべてのデータを読み込むというのは達成できている。)

さて、MySQL 5.6(RDS for MySQLの現時点で利用できる下限のバージョン)以上では、information_schemaにsecondary keyを含むすべてのインデックスの情報が入っているので、これを利用してファーストタッチペナルティを解除するスクリプトを作ることができる。それが以下の3ライナー。YOUR_DATABASE_NAMEをDB名に置き換え、ホスト名などの認証情報は~/.my.cnf等に書いておくと楽。

mysql -sse "SELECT distinct table_name, index_name FROM information_schema.statistics WHERE table_schema = 'YOUR_DATABASE_NAME'" | while read table index ; do mysql -sse "SELECT count(*) FROM $table FORCE INDEX($index)" YOUR_DATABASE_NAME > /dev/null & done

どれくらいで終わるかはテーブルとレコードの量、インスタンスタイプに依存するので一概には言えないけど、こういうのを考える必要があるサービスの規模であれば、数時間は見ておいて方がいいだろう。終わったかどうかは実行したクライアントマシンのmysqlプロセスの数を見るか、MySQLサーバに入ってshow processlist等でSELECTクエリが残っているかをみればよい。

なお、新しいDBサーバの本番投入の前には、バッファプールも整えておいたほうが良い。これこそサービス依存なのでこうすればいいというのは存在しないが、SELECTされる回数の多いテーブルなどメモリにのっていてほしいデータをSELECTするクエリを流しておくとよい。

参考文献 ASCII.jp:カヤックでのAurora移行は「今のところいいことしかない」

質問が上手になりたい

上手に質問ができると気分が良い。最初の質問から自然な流れで素早く解答までたどり着けると、良い質問ができたなぁと思う。自分はいつもいい気分でいたいので、上手な質問というのはどういうものなのかをまとめてみることにした。

質問をする場面や、質問をするのにつかうツールはいろいろあるが、ここでは「チャットツール」で「うまくいかなかったとき」や「やり方を迷っているとき」を質問するケースを考えてみた。

うまくいかなかったことを質問するときの仕方 Lv1. 「(試したことを言わずに)OOするにはどうしたらいいですか?」 Lv2. 「XXをしてみたのですが〇〇ができません。」 Lv3. 「XXをしたら、〇〇となるとおもったのですが、□□になりました。どうしたらよいでしょう」 これからやることのやり方を質問するときの仕方 Lv1. 「〇〇はどうしたらいいですか?」 Lv2. 「〇〇する方法はAとBとCがありますが、どれがいいでしょうか」 Lv3. 「〇〇する方法はAとBとCがありますが、(XXを考慮すると)Aで良いと思うのですがどうでしょう?」 上手な質問は相手を質問者の立場にさせる

言うまでもないが、Lv3が上手な質問だ。Lv1はどちらも出来なかったという事実や、わからないということを伝えている。Lv2になると質問者が行ったことや、質問者が考えたことが伝わるようになっている。Lv3では、その状況をどう解釈したのかという質問者の気持ちに近い部分、すなわち質問した相手が類推するのが難しい部分を伝えることができている。

質問をしたということは、解答を得たかったり、一緒にその問題に取り組んでほしいはずだ。そのためには、質問した相手に質問者の立場になってもらうことが近道だと考えている。それには、最低限でも質問者だけが知っている事実を伝える必要がある。そのうえで、その事実をどう解釈したのかという質問者しか知り得ない情報を加えることで、質問された相手はその質問の意図を汲み取り、質問者と同じ立場で考えることができるようになるだろう。

上手な質問をすることは「スキル」すなわち身につけることができ、身につけたあとは意識することなくできるようになることだと考えている。最初はまどろっこしいと思うかも知れないが、質問を書いてエンターキーを押す前に一度立ち止まって、自分しか知らない情報が抜けてないか、もう少し自分で調べられることはないか、それらをどう解釈しているか、考えてみると良いと思う。

「雑な質問をすること」と「雑に質問をすること」は違うのだ。

自戒を込めて。

参考情報

より技術的な質問や、バグレポートの書き方などは、世の中によいドキュメントがたくさんあるのでそちらを読んでみると良いと思う。

技術系メーリングリストで質問するときのパターン・ランゲージ 良い質問をするには? - ヘルプ センター - スタック・オーバーフロー

2021-02-15

睡眠が破滅してしまってパフォーマンスの悪い1日だった。

息子と一緒に継続的に勉強をしてみようと、二人で英検の勉強をしてみることにした。今日は初日ということで、1ポモドーロほどそれぞれの参考書を進めてみた。息子は5級で自分は準2級。準2級は高校卒業くらいということで、学び直しにはちょうどよいだろう。実際にやってみると、問題は解けるんだけど、意味がパッと出てこない単語やイディオムがあったりして程よい難易度という感じ。息子は、とりあえず問題集を25分やってみたけど、基本的な単語を覚えるところからやったほうがいいかもしれない。

英語関連だと、昨日までELSAが50%オフセールをやっていたので1年契約してみた。今年はDuolingo Plusは解約するつもりなのでその代わり。いざやってみると、噂通りかなり判定が厳しくていいトレーニングになりそう。ただ、コメントだけを読んでも舌の使い方がわからないものもあり、何らかの動画コンテンツとセットでやったほうがよさそう。

今日からは、25分英検の勉強、15分ラジオ英会話、10分ELSAと、2ポモドーロくらい勉強するのが目標。あとは、息子との勉強時間は仕事を一段落させるアンカーにもなりそうなので、そのあたりのメリハリがつけられる生活にしていけるといいな。

「16Personalities」をやってみた

おつかれシャワーの#116 @hmskと@june29が「16Personalities」をやってみた - YouTubeで紹介されていた16Personalitiesをやってみた。

結果は「冒険家」だったのだけど、納得できる部分もあれば、あまり自覚していない部分もあり、面白かったので感想などを書いておく。

冒険家の性格の全文は“冒険家”型の性格 (ISFP) | 18Personalitiesにある。

私は一日の中で変化する。朝起きた時はある人で、寝る時は確かに別人だ。

これはかなり自覚があって、ノッているときとそうじゃないときのパフォーマンスにばらつきがありすぎると思う。

持ち前の美的感覚やデザイン力、そして自分の選択や行動さえも活かして、社会的慣習の枠を押し広げます。美の表現や行動を試みながら、従来の期待を覆すことを楽しみ、たぶん、これまでに「私を型にはめないで!」と何度も言ったことがあるでしょう。

これはあまり自覚がない……特にデザイン力や美的感覚みたいなものは微塵もないと思っているし「私を型にはめないで!」というのは言ったこともない気がするw

冒険家型の人達は、人々やアイデアとの繋がりに刺激を受けながら、色鮮やかで官能的な世界に住んでいて、こうした繋がりを再解釈しながら、自分自身や新しい視点を再発明したり実験したりして楽しみます。

人や物事のつながりを見つけたり、新しい視点を見つけると楽しくなるのですごく納得できる。

冒険家型の人達は間違いなく内向型で、人前から姿を消し、一人になってリフレッシュすることもあり、さらに友人たちを驚かせます。

はい。友人たちを驚かせてはいないと思うけど、このあたりはそのとおりだと思う。

冒険家型の人達は、自分の情熱を押し広げられる道を見い出すために生きていて、他の性格タイプよりも、まるでギャンブルや極限スポーツのような、より危険な行動が多く見られます。

見に覚えがないことはないかな。大体のことはなんとかなると思い込んでいるふしがある。 

冒険家型の人達は、他人の感情に敏感で、調和を重んじます。批判に直面した際には、一歩下がって、一瞬かっとなった気持ちを抑えるために十分間を置くことが、冒険家型の人達にとって課題といえるでしょう。しかし、冒険家型の人達の内面は、一瞬のうちに方向転換するので、議論で高まった感情がおさまると、大抵の場合、過去は過去と割り切り、まるで何事もなかったかのように前に進みます。

他人の感情には鈍感な方だと思うけど、気持ちが大きく動くような出来事のあとは意識的に一呼吸置くことを心がけてる。40年近く生きてきて「冒険家」の課題を自覚してコントロールできつつあるのかな。

冒険家型の人達にとって最大の課題は、将来に向けて計画を立てることです。目標の土台となる建設的な理想を見つけて、前向きな原動力を生み出す目標を成就させるのは、容易なことではありません。番人タイプとは異なり、冒険家型の人達は、資産や退職の計画を立ることはありません。... 冒険家型の人達が覚えておくべきことは、なりたい自分になるために積極的に行動することです。新しい習慣を築き維持するのは、たやすいことではないかもしれませんが、毎日時間を作って自分の動機を理解することで、長所を活かしながら、気に入ったことをとことん追求できるのです。

最後の段落は「これは自分のこと知ってる人が書いているのか?」と思うほど。ようやくここに課題があることを理解して、昨年末からいろいろ実験をしているところだったので、頑張ろうという気持ちになった。

前半はあまり自分ごと感がなかったが、読み進めていくうちに納得感がでてきて、たしかにそういう面があるなぁと思える結果だった。それと同時に、自らの課題だと感じているところがそのまま書かれていたので、その部分を改善することに意味があるのだなと思えたのがよかった。

16Personalitiesは、ストレングスファインダーと同じように、何度やっても大きく変わることはないようだが、数年後にまたやってみてどういう結果になるか見てみようと思う。

「行動経済学の使い方」を読んだ

昨年末から、主に自分の行動や習慣を変えたくて何冊かの本を読んでいて、使える行動分析学の次に読んだ一冊。昨日聞いた123. セコンさんとSNSへの距離感の話 | Ossan.fmで「好きな学問」というテーマが話されていたけど、自分はこの本を読んで「行動〇〇学」と名前がついているものが好きなのかもしれないと思えるようになった。

どんな本か

最初の2章で、伝統的経済学と行動経済学の違いを述べ、行動経済学が明らかにしてきた人間の特性を活用して人々の行動をよりよいものに変えていく「ナッジ」と名付けられた概念を学んでいく。

3章以降は、「ナッジ」の具体例を数々の実験(身近なものから社会実験のようなものまで)から紹介してくれるので、理論から実践まで行動経済学とはどういうものかを理解できる。

どこが面白かったか

人間は、必ずしも合理的な判断ができない(むしろ合理的な判断をしている方が少ないとも感じられる)が、行動経済学ではその原因や傾向はある程度明らかになっているということがわかって面白かった。

たしかに、不合理な判断をする場合であっても、それは合理的な判断からランダムにバラけるわけではなく、ある程度傾向があることはなんとなく想像がつく。

よく聞く例題に、「今もらえる1万円」と「1週間後にもらえる1万100円」のどちらを選ぶかというものがある。本書ではこれと同じようにな質問で「1年後にもらえる1万円」と「1年1週間後にもらえる1万100円」だと人々の選択はどう変わるかというのを紹介していて、この結果は非常に興味深いものだった。そして、これは「現在バイアス」という概念で説明できるという話につながっている。

3章以降は、仕事やプライベート、社会実験まで様々な事例が出てくるので、ファクトやインセンティブを変えずに人の行動を変えるというのはこういうことか納得できるものが必ずあると思う。ここでの事例の幅の広さもとても面白かった。

どこがわからなかったか

8章の「公共政策への応用」は、スケールの大きな話であることと、正直日本があまりうまくできているとは思えない部分でもあり、あまり頭に入ってこなかった。また日を改めて目を通そうと思う。

明日から役に立つことは何か

ナッジの設計には「本人が行動変容を望んでいるか」かどうかが大きな影響を与えるとあった。「使える行動分析学」を読んだきっかけも自分の行動を変えたいからである。「行動変容を望んでいる」という前提で、今自分がやっている習慣化の仕組みなどを見直してみたい。特に「フィードバックの有無」が自分にとって重要であると感じつつあるので、本書で紹介しているナッジのチェックリストを見ながらやりかたを変えていこうと思う。

おわりに

最初に述べたとおり「行動〇〇学」というのに興味がでてきたので、おすすめの本があったら教えてほしい。

2021-02-03

午前中と夕方はミーティングだったので、午後イチで少しコードを書いたり。組織周りでもうちょい書物があるので、明日はそれを進めなければ。

夜は、子の習い事の帰りに買ってきてくれたロイホのテイクアウトのハンバーグを食べた。まぁやっぱり、一度冷めても美味しいものってのは難しいよなと思うなど。コンビニは偉大。(美味しくないわけではないのだが、冷めたり再加熱しても美味しいというのは、作りたてで美味しいものとは全く違うんだよな、というくらい)

今日のウェブログ

株式会社NTTドコモとのキャッシュレス推進に関する連携協定を締結しました 習志野市ホームページ

今月に入ってからd払いのチラシをよく見るなと思っていたら、こういう事になっていたらしい。d払い使ってなかったのだけど、市がやるんだったら今後いいこともあるかもしれないので使えるようにした。

(たぶん)日本初、Clubhouseで決算説明会 東証1部・GMOペパボが開催 「社長がきのう突然……」 - ITmedia NEWS

会社の決算説明会とその後の質問などがCloubhouseで行われたらしい。ちょうどミーティングが入っていて参加できなかったので残念だったが、こういう新しい取り組みをできるのはよいことだと思って見ていた。

今日の読書

おやすみ

今日の英語

ラジオ英会話 Lesson 197。notは直後の語を否定するので

I'm really not interested. I'm not really interested.

は全く違う意味になるよという話。勉強になった。

2021-02-01

先週くらいからゆるゆると社内で共有してきた事業部の組織変更が発表になった。自分自身の立場や動きは変わっていないが、一番近くのチームを分解して、よりミッションが明確になるようにしたというのが身近なところでの変化だろうか。今回の組織変更は、自分の思いというか、意見を全面的に取り入れてもらった形に近いので、うまくいってもいかなくても、1年後くらいには結果をアウトプットしようと思う。

夜、お風呂で121. 日常の切り取り方 | Ossan.fmを聞いていたら、突然この日記が紹介されてびっくりした。これがラジオでお便りを読まれる感覚かと思って嬉しくなった。

今日のウェブログ

フロントエンド初心者がGatsbyでブログを作り直した話 - As a Futurist... 60 Best Google Analytics alternatives: The Complete List for 2020 | Plausible Analytics

riywoさんのブログを作り直した話で、GAのalternativesの話がでていたので調べていた。riywoさんが使っているPlausibleにちょうどいいまとめがあったので見ていたが、たしかにこれらを見てもPlausibleはよく出来てるようにみえる。乗り換えてみようかなぁ。

Clubhouse: Drop-in audio chat

ウェブログとはちょっと違うけど今話題のやつ。せっかくなのでやってみようと、会社の方に招待してもらったが、自分が配信するようになるイメージはあまりわかないよなぁ。夜にいくつかのルームにお邪魔して話をきいてた。

今日の読書

1ポモドーロでサイトリライアビリティエンジニアリングの8章と9章、第3部の導入を読んだ。

リリースエンジニアリングは安定して繰り返せることが大事なので「個性的」でないほうがよいというのは納得。また、初期から始めたほうがよいというのもその通りだと思う。最初から入れたほうがレバレッジが聞くというのはもちろんだが、リリースプロセスはアプリケーション自体の設計や実装よりも安定した基盤であるインフラや実行環境に依存していて、ツールやプロセスを大きく変更する理由が少ない。概ね満足できるものが最初にあればそれを使い続けることに不満は出にくいように思う。ただ、逆に最初がまずいものだと、それを変えるインセンティブが働きにくく、長い目で見たときに強力なブレーキになりうるものだと思った。

9章は引用の文章がどれもよかったのだけど、特に「ソフトウェアは退屈であることのよい」というのはとても共感できた。特にソフトウェア開発という文脈では、サプライズはいらないのだ。ユーザインタフェースの文脈では「驚き最小の原則」とも言われる事があるが、思ったとおりにことが運ぶというのはソフトウェアでとても大切なことだと思う。 ソースコードリーディングがスムーズに進むのは、自分のメンタルモデルとソフトウェアの構成要素が一致しているときだ。ただ、勘違いしてはいけないのは「自分のメンタルモデル」と一致しているのが大事なのではなく、「私達」あるいは「世の中の優れたエンジニア」のメンタルモデルと一致していることが重要なのだ。そのためには、日々学習し続けるしかないのだよなぁ。伸びしろしかない。

今日の英語

ラジオ英会話のLesson196。文法の解説で、省略されてるのを説明してくれると理解が深まるなぁと思った。英語では「~しないと思う」ではなく「~すると思わない」という表現が好まれるというのを見て、こういうの昔習った記憶はあるんだけど、ぜんぜん自分のものになってないなぁと思ってしまった。

i don't think that will work.