「睡眠こそ最強の解決策である」を読んだ

最近睡眠が破滅しているというのをチームのふりかえりで話したところ、「睡眠について科学的にわかっていることを体系的に学び、それを実践せよ」というまっとうな意見とおすすめ図書を教えてもらったので、観念して「睡眠こそ最強の解決策である」を読んだ。

読み終えてから改めてAmazonのページを見ると、サマリはここに全部書いてあるじゃんという気持ちになるのだけど、それはそれとして、睡眠についてどこまで解明できているのかというのがしっかり書かれているので読み物としても面白かった。特に「夢」についての実験は興味が惹かれるものが多かったように思う。また、これに関連してカフェインについて調べてみたら、実はコーヒーよりも玉露のほうが含有量が多いというのを見て、玉露入り緑茶が最大の敵ということがわかってよかった(?)。

実践しないと意味がないので、まずはこんなことをやっている。

  • PCのナイトモード設定をより強くした
    • Windows 10の夜間モードで強さ70
  • PCのある部屋の照明を一番暖色&暗くした
  • 外でコーヒーを飲むのをやめた
    • 家ではもともとカフェインレスコーヒーだけだったので外では紅茶にするようにした
  • 0時までに寝室に行く
  • 寝る前に気になったことをすぐメモして忘れられるようにペンと紙を持って寝室に行く
    • 気になることが頭に残って寝れないこともあったので、書き出してしまうと頭からでていくかなと期待して
  • 寝る前に頭を使わなくてもいい、使うつもりがない本を読む
  • 寝れなかったら体温下げるためにアイスノンを使う
    • これは本当に良いかわからないけど、体温下げるのに役立つと期待してやっている

しばらくはこれで様子を見ようと思う。アルコールは、やめればいいんだけどまぁたまには……

以下読書メモ。

  • カフェインは精神刺激性のドラッグ
  • 寝ないと本当に死ぬ
  • 朝型夜型の分類は遺伝で決まる事が多い
  • 概日リズムとアデノシンによって睡眠圧がかかる
  • レム睡眠はニューロンのつながりを強化する、ノンレム睡眠はニューロンのつながりを削除する
  • レム睡眠による夢はメンタルヘルスを整えるだけじゃなく、問題解決と創造性にも寄与することがある
  • まだ眠くても起きて行動するのは人間だけ
  • 睡眠薬やアルコールによる眠りは、自然の眠りの効果を得られない
  • 睡眠不足の人は簡単な仕事を選びがちだが、本人は簡単な仕事を選んでいるという自覚もなくなってしまう。自己評価と他人からの評価がずれていく。

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するクエリを流しておくとよい。

参考文献

質問が上手になりたい

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

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

うまくいかなかったことを質問するときの仕方

  • 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ポモドーロくらい勉強するのが目標。あとは、息子との勉強時間は仕事を一段落させるアンカーにもなりそうなので、そのあたりのメリハリがつけられる生活にしていけるといいな。

2021-02-14

午前中は髪を切りに、午後は買い物に出て、夜はバレンタインデーということで南インド料理店総料理長が教える だいたい15分! 本格インドカレーを見ながらサバ缶カレーを作った。

数日前、会社のslackにあるカレーチャンネルに同僚がこの本のレシピを見ながら作ったカレーを上げていたのを見ていいなと思ったのがきっかけ。スパイス類は近くのイオンで全部揃えられたので、これで完璧と思って作り始めていたのだが、カットトマトの分量を間違えてることに途中で気づき、ちょっと水っぽくなってしまった。ただ、スパイスの分量はいい感じで、トマト強めのスパイスカレーって感じでまずまずの出来だったと思う。次は分量を間違えずに作るぞ。