patorashのブログ

方向性はまだない

PostgreSQLのチューニング法がまとまっていてよかった

OSS-DB Silverの試験の勉強のために借りた本ですが、ようやく読み終わった。

内部構造から学ぶPostgreSQL 設計・運用計画の鉄則 (Software Design plus)

内部構造から学ぶPostgreSQL 設計・運用計画の鉄則 (Software Design plus)

内容自体は難しいというか開発者的になかなか使う機会がない機能とか設定のことが載っているので、試験対策的にもすごく勉強になったけれど、まぁこの本が手元にないと厳しいなという感じ。

面白かったのは、やっぱりチューニング編だった。私は実行計画の見方が本当によくわかってなかったので、コストの計算式とかを見ることでようやく意味がわかった(式は覚えてないけど)。また、統計情報がちゃんと更新できてないと実行計画に影響がでたりすることや、postgresql.confのrandom_page_costなどHDDを想定した設定値の4になっているものはSSDにしているのであれば1に変更したほうがいいとか、このあたりは興味深かった。

レプリケーションの話も、実際にまだやったことがないので、実験的にやってみようと思っている。PITRの仕組みを使ってストリーミングレプリケーションしているというところは、たしかにその方法を流用できるな〜と感心した。このあたりの知識をちゃんと経験にしていきたい。

借りて読み終わったものの、もうすでにこの本が欲しくなっているので、おそらく買ってしまうだろうなぁ…。

OSS-DB Silverの試験に合格した

育児休業中なので、育児しながら資格の勉強でもしようかと考えていたので、1月から時々PostgreSQLの資格であるOSS-DB Silverの勉強を時々していた。とはいえ、育児と在宅で仕事をやっているとなかなか時間も取れず、結構大変だったのだけれど、妻のご両親から「もうちょっと実家のほうにおって静養したら?」と言われたので妻と子供達が少しの期間実家に戻ることになったため、その期間で猛勉強して資格取ってやろう!と決めて、勉強に取り掛かった。

勉強に使ったもの

書籍

OSS教科書 OSS-DB Silver

OSS教科書 OSS-DB Silver

勉強に使った書籍は、OSS教科書 OSS-DB Silver。ずーっと前にKindleで50%オフになってたときに買っていた。そのときは、資格を取るつもりは特になく、教科書だから一通りの知識も手に入りそうだなーという気持ちで買っていたのだけれど、やっぱり試験を受けるつもりで読まないと内容がなかなか入ってこないなと思った。この本はとてもいい本だなと思うけれど、いかんせんPostgreSQLのバージョン9.0までしか対応していないので、改訂版が出てほしいところではある。

章ごとに、問題があるのと、最後に模擬試験があるので、それを3周やった。最初は4〜5割の正答率で散々なものだったが、回を重ねると理解度が増していった。

内部構造から学ぶPostgreSQL 設計・運用計画の鉄則 (Software Design plus)

内部構造から学ぶPostgreSQL 設計・運用計画の鉄則 (Software Design plus)

内部構造から学ぶPostgreSQLは、実はまだ全部は読んでないのだけれど、読んでいる途中でも学びが多かった。仕組みがわかってくるので、なんとなくの理解だったところが補強された。

アプリ

OSS-DB認定試験Silver

OSS-DB認定試験Silver

Kindleアプリなのだが、OSS-DBのサンプル問題がアプリになったもので、問題数もさることながら、本番さながらに選択していくことができるので、その点はよかった。選択問題で、選択項目の順番がランダムで変わるため、ちゃんと正解がわかっていないと答えられないようになっているのがよかった。

ただ、作りがあんまりよくなくて(文字の大きさ、行間とか)、回答の解説の読みにくさが辛かった。しかし、解説のページから、参照している問題のページへのリンクが貼ってあるので、読みにくかったらそちらに移動して読めた。あと、アプリの不具合で正解がセットされていなかったり、正解が3つあるのに問題が「2つ選べ」になっていたりしたのも、参照ページに移動すればちゃんとしていたのでなんとかなった。

170問もあるので、これも全部やったわけではないのだけれどかなり参考になった。

勉強しての感想

よくRailsエンジニアはDBのことよくわかってないとか言われるので(主にDB界隈から)、もともとそういうコンプレックスもあったので、ちゃんと資格を取れるくらいPostgreSQLについて勉強できたのはよかったと思う。特に運用面とかで、データのバックアップ・リストアのあたりの知識は、毎回ググりながらやっていたりしていたのだが、バックアップ形式の違いでどういうメリット・デメリットがあるのかを学べたのはよかった(plain形式とcustom形式の違いとか)。

開発でもUNION, EXCEPT, INTERSECTをもっと積極的に使っていけるシーンは結構あるなというのは思ったし、部分INDEXや関数INDEXを使ってもよさそうなところももっとありそうだなと思うところもあった。プログラム側でフレームワークだけを触っていたのではわからないものがデータベースにはあるし、それを勉強したほうが何倍も速度改善につながるものがあるので、データベースにもっと興味を持ってもいいんじゃないかなーと思う。

ちなみに試験の問題は50問。67点以上が合格ラインで、90点で合格できたので結構いいほうだと思う。試験の難易度は、結構難しかったので、なおさら合格してホッとした。

育休エンジニアなのでPostgreSQLの勉強をしている その2

内部構造から学ぶPostgreSQL 設計・運用計画の鉄則 Software Design plus

内部構造から学ぶPostgreSQL 設計・運用計画の鉄則 Software Design plus

引き続き、この本を読み進めている。Part2では、設計/計画編だった。このセクションも長いので、ボチボチ読んでいく。

知らなかったこと

文字列型

char型は余ったらその分を半角スペースで埋める。 varcharとtextの場合、textのほうがパフォーマンスがいいという話を聞いたことがあったのだが、その理由を知ることができた。varcharは長さを指定する必要があるため、サイズ上限チェックの処理が行われるため、textよりもわずかにパフォーマンスがよくないらしい(微々たるものだが)。

面白い話で、char型は文字列連結のときの動作が異なるというのがコラムに書いてあった。concatで連結すると、半角スペースで埋められた分を反映するが、||で連結すると半角スペース埋めがなくなるらしい。

数値データ型

numeric型は精度がいいが、演算が遅い。ただ、double型などは精度が低いので、正確な数値を出したい場合はnumeric型を使うべし。

smallint, int, bigintや、連番型のsmallserial, serial, bigserialなどがある。

日付型

timestamp with timezoneなどタイムゾーンを扱える型がある。タイムゾーンを含める場合は、timestamp with timezoneを使うとよい。time with timezoneはサマータイムとかのことが考慮できないのでよくないとか。interval型はOSS-DB本でも出てきたが、まだ使いどころがよくわかってない。タイマーとかだろうか?

制約

外部キー制約

外部キーには暗黙的なインデックスが設定されないということなので、必要に応じて外部キーにもインデックスをつけたほうがよいらしい。

PostgreSQL固有のテーブル設計

TOASTを意識しろとのこと。日本語だと過大属性格納技法というちょっと難しい感じがする言い方だが、要は列のデータサイズが大きい場合の実装技法のことらしい。行にたくさんの列があって、行のデータサイズが2KBを超えるとTOAST領域にデータが作られるらしいので、なるべくこれに収まるようにするとよいようだ。

とはいえ、そんなにシビアに意識しなくてもよいとか。

ファイル

WALファイルとアーカイブファイル

WALファイルとアーカイブファイルはバックアップ・リストアのときに重要。更新ログが多くなって再利用されるときに古いWALファイルは削除されるので、アーカイブ設定をちゃんと行うこと。また、アーカイブファイルはストレージを圧迫していくのでストレージ容量をちゃんと監視しておかなければならない。

HOTとFILLFACTOR

HOTはVACUUMを待つことなくすぐに不要領域を再利用する仕組みで、インデックスの更新が発生しないため、更新時のパフォーマンスがよくなったとか。

FILLFACTORは、ページ内の空き領域を多めに取っておくことで、更新処理が行われたときに新しいページの生成を抑止することができる。メリットは、新しいページが作られないのでパフォーマンスが向上することだが、デメリットは多めに空き領域を取るため、ストレージを多めに使うことになる。デフォルトは100%で、空き領域を作らない設定のようなので、更新が頻繁に発生するテーブルには下限を70%として設定するといいとか。これ以上下げても、HOTがあるから不要領域がすぐ回収されるため、そんなに多くの空き領域を作っておかなくてもいいらしい。

気づき

FILLFACTORのことは全く知らなかった。うちのサービスはデータを定期的に更新するため、これを設定したら更新パフォーマンスが上がりそうに思った。 使えそうなところで使っていきたい。

育休エンジニアなのでPostgreSQLの勉強をしている

長年、データベースに関する知識がまだ足りてないなぁと思っていたので、育児しながら空いた時間でPostgreSQLの勉強を始めた。

内部構造から学ぶPostgreSQL 設計・運用計画の鉄則 (Software Design plus)

内部構造から学ぶPostgreSQL 設計・運用計画の鉄則 (Software Design plus)

まずはOSS-DB Silverの取得を目指しているのだけれど、この本がPostgreSQLの勉強にとてもよいと聞いたことがあったので、会社に行ったタイミングで同僚から借りてきた。

内容は、

  1. 基本編
  2. 設計/計画編
  3. 運用編
  4. チューニング編

とあるのだが、ひとまず基本編を読み終えた。基本だけれど難しい!

知らなかったこと

PostgreSQLのプロセス

PostgreSQLはプロセスベースであり、親プロセスと、様々なプロセスをフォークして制御を行い、接続があった時に親プロセスが接続に対するバックエンドプロセスを起動する。 プロセスベースであるということは知っていたけれど、具体的にどういうプロセスがあるのかについては知らなかった。

WALライタプロセスや、自動バキュームランチャプロセスなど、ある程度OSS-DBでWALや自動バキュームについては知っていたけれど、どういう風にしてるんだろうか?と思ったら、専用プロセスが常駐しているとわかってよかった。

メモリ管理

バックエンドプロセスのプロセスメモリ域と、共有メモリ域に分けられる、くらいのざっくりした理解をした。

各種設定ファイルについて

設定ファイルは複数あって何が何を担当しているのか、というあたりがよくわかっていなかったが、そのあたりもまとめられていた。

postgresql.conf

設定項目が大量にあるので、ここではそんなに触れられてはいなかったけれど、includeで設定ファイルを分割して管理できるということを知れたのはよかった。 同じ設定項目がある場合は、後勝ちする。

pg_hba.conf

アクセス制御はこのファイルで簡単に行えるのはいいなと思う。pg_ctl reloadで設定を反映できる。 postgresql.confと違い、設定は先勝ちするので、設定の順番次第では無意味な設定ができてしまうので注意。

トランザクション

トランザクションの分離レベルについてはOSS-DBの出題範囲でもあるので、ここは押さえておきたいところ。バージョン9.1からリピータブルリードが使えるようになったらしい。分離レベルが高ければいいというわけではない、というのも例があってわかりやすかった。

ロック

ロックに関しては、まだよくわかっていない。自動的に取得されるロックが多い。明示的なロックの使いどころ、自分の仕事ではいつ来るのだろうか…。

感想

わからないところやわかったところをアウトプットすることを通して、理解を深めるためにとりあえずブログに書いてみたので続けていきたい。

育休エンジニアなので平日にスタジオアリスに行ってみた

次男が生まれて1ヶ月が経過したので、お宮参りの写真を撮るためにスタジオアリスに行ってきました。 神社へのお参りは今回は延期して、写真のみで。まだまだ寒いのと、インフルエンザが流行っているので、神社に行くのは温かくなってからにしようということに。

週末のスタジオアリスは大変だったが

長男の時は、週末に撮りに行ったのですが、ものすごく混雑していました。そして子供(赤ちゃん)相手に写真を撮るため、撮影時間も結構伸びたりしてとても大変だったと記憶しています。撮影には2時間程度かかる、と書いてあったのですが、終わったのは4時間オーバーでクタクタでした。途中、長男が寝てしまったというハプニングもありましたが。

平日のスタジオアリスは超快適!

3連休を外して行ってみたところ、お客さんは数組いる程度。途中からは我が家のみになったので、写真撮影もサクサク進み、長男がスタジオ内を走り回ってもある程度は問題なかったのでめちゃくちゃ快適でした。写真選びの時間も込みで、2時間くらいで終了。スタッフさんも長男に声かけてくれたりして助かりました。

スタジオアリスは平日に行くのオススメ

行けたら行っとるわ!と言われそうですが、お休みの日に行くと予想以上に時間かかってほんまにクタクタになるので、もし有給休暇取れるんだったら、平日にスタジオアリスとかの写真館に行くのをオススメします。

写真は2週間でできるということで今から楽しみです!

育児休業を取って一ヶ月が過ぎた

次男が産まれてから、もうすぐ一ヶ月です。育児休業は男性の場合は出産予定日からの取得になるのでもう一ヶ月が経過したことになります。

何をしていたか

次男が産まれてからは、妻は子供を連れて実家に戻っていたので、その間に家の掃除や不要品の処分などをせっせと進めていました。お陰で随分不要品をなくすことができたので、心理的に楽になりました。また、子ども手当の申請とか、保険証の申請とか、医療費控除の申請とか、色々申請しまくってました。

あとは車を替えたので、旧車の売買手続きや新しい車の名義変更や車両保険の変更などで各所に連絡をとったり。今度の車は車内空間が広いので動きやすくてよいです。

また、時々自宅から仕事をすることもあるので、机の周りを整備したり、椅子を買ったりしました。一万円ちょいなのにハイバックで座り心地のいい椅子で、かなり満足してます!


また、普段はデュアルディスプレイなのですが、ノートPCを左、ディスプレイを右に置いていましたが、常に斜め右を見るような姿勢になってしまい、以前に筋を痛めて整体に行った際に、姿勢が右に偏っているのを指摘されたので、ディスプレイを上下に配置するために、ディスプレイスタンドを買いました。前を見るだけでよくなったので、姿勢もよくなったし首の凝りも以前より減ったような気がします。


現在の課題

先週から妻と子供たちが戻ってきて、いよいよ4人での生活が始まりましたが、なかなか大変です。

  1. ご飯を作って食べたらすぐ次のご飯を作らないといけない
  2. 仕事、勉強の時間の確保が難しい
  3. ベビーサークルはあるが、ベビーサークルに長男が物を放り込んでくる
  4. 次男がよく泣く(新生児なので仕方ない)
  5. 長男が偏食でなかなか野菜を食べない
  6. 長男が歯磨き、耳かきなどを嫌がる
  7. みんなで一緒に寝ると長男が次男を踏みつけそうになる

とりあえずの対策

正直、対策というか対応の仕方がわからないものがあるので、困っています。特に歯磨き。無理に磨こうとしたことがあるせいか、全力で嫌がるようになり、全く磨けなくなってはや数ヶ月…。

  1. ご飯は一度にたくさん炊く。常備菜を作る
  2. 妻と次男が一緒に寝て、別の部屋で私と長男が寝る
  3. カレーや餃子の具を工夫して野菜を無意識に食べさせる
  4. 机で勉強せず、子供たちがいるところだけど子供たちが手の届かないところで本を読んだりPCを使ったりする

しかし、集中があまりできないので、なかなか本の内容が頭に入らないのが問題です。

大変だけれど慣れていくのと工夫していく余地がまだまだあるので、引き続き頑張っていきます!

かずー氏の本を読んだら人工知能のことちょっとわかった気がした

今期の目標に、人工知能について調べてみると書いていたものの、読み始めた本が結構眠くなる内容でなかなか理解も進まなかったので、もっとイメージだけ先に掴んでから読んだほうがいいかなぁと思っていた。そこで、同僚が持っていた本(通称:かずー氏本)を借りて来て読んだのだった。

コンピューターで「脳」がつくれるか

コンピューターで「脳」がつくれるか

脳を真似ようとしているのが人工知能

かずー氏の本のアプローチは、人間の脳の説明から入っていて、脳のこの部分はこういうことを担当していて、それをAIでやろうとすると、こういう手法になる、という説明がされているので、なんとなくわかった気になる。実際には脳に関するキーワード全然頭に入ってきてないので、イメージだけが掴めるという感じ。

かずー氏本からのメッセージとしては、「汎用AIにはロマンがある」というふうに受け取った。

よく聞くキーワードについてもなんとなくわかる

機械学習

機械学習はコンピュータ自身に自動的に学習していってもらうというもの。普通は人間自身がプログラミングをして、どう判定するかを適宜定義していくわけだが、その判定基準の学習をコンピュータ自身が行うようにしていく。

教師あり学習

教師あり学習は、最初は正解を人間が教えて、傾向を掴んでいくように仕向けるもの。そこから正解の特徴を見つけていき、精度が上がる。ただし、汎化能力を高めないといけない。汎化能力とは、蓄積された知識を応用できるかどうかとことで、汎化能力が高いと、今まで学習してきたものとちょっとだけ違う問題にも答えられるけれど、低いと、ちょっと違うだけなのにミスしてしまう。汎化能力が低いものは過学習といって、教師からの問題に最適化されすぎてしまっていることをいうらしい。 なので、正答率が高ければいいというものでもない。

教師なし学習

教師なし学習は、コンピュータが自動でデータから傾向を導き出して法則を見つけ出したりするもの。人間が気づかない関連性を導き出したりする。

強化学習

強化学習は、行動に対して報酬、または罰を与えて、報酬のある行動を行い、罰のある行動を避けるようにしていくもの。いいことしたらご褒美あげて、悪いことしたら怒られたり、痛い目にあったりするというところが動物が学習していくところと似ている。似ているというか、それをモデル化したものだけど。

ディープラーニング

ディープラーニングは、人工のニューロンを定義して、学習する層を多層(深層?)にすることによって、より複雑な学習が行えるようになったもの。今最も熱い分野である。

脳のことがわかる

人工知能で知能を作ろうとしているため、身近なモデルである脳についての説明がされている。どの部位が何を担当していて、それは機械学習でいえばこういうことをやっているだろう、という風に書かれている。小脳は教師あり学習をしているとか。そして、大脳の謎はまだまだ多くてわからないことが多いというのもわかる。ディープラーニングっぽいことを大脳新皮質がやっているみたいではあるが、そんなに層があったら人はこんなに速く物事を判断できないということもあり、脳は非常に興味深い存在であるなとわかった。

脳の仕組みがわかれば勉強法も変わる?

余談ではあるが、脳の仕組みを理解して、勉強に対して強化学習でご褒美をあげるようにすれば、快に変わっていって億劫なこともだんだん楽しくなっていくのではないだろうか?そういうメカニズムを知っていれば、面倒臭いことに対する戦略を立てて攻略できそうに思えた。機械学習とは全然関係ないけれど、そう思った。

次の段階の本はなんだろう?

なんというか、学習するアルゴリズムに対する勉強をしておかないと全然わけわからないだろうなーと思えたので、大枠が知れたことはよかったと思う。とりあえず、前に買った本にもう一度チャレンジしてみよう。