• [勉強会] ZendFramework勉強会@Tokyo で話してきました

    ちょっと遅くなってしまいましたが、4/4に開催されたZendFramework勉強会@TokyoのLTで話してきました。 準備不足もさることながら、半分くらいで制限時間が来てしまうなど非常にグダグダでしたので、出席された皆さんには申し訳ないと思っています。 発表資料はこちらにおいておきます。firefoxで見てください。 いくつか勉強会報告の記事を読んでいたら、junichiroさんのブログでこんな意見がありました。 ブログが続かないわけ Zend\_Log にローテーションの機能をつけようという話。 僕の個人的な感想としては、疑問符がつくないようだったが、(略) (略) logrotate と比較して、ZendFramework で実装することのメリットを提示して もらえたら、より面白かったと思う。 まず、作った経緯ですが、 権限的にlogrotateの設定ができない状態だったので、アプリ側でやる必要があった log4phpとでもよかったが、Zend Frameworkの(拡張も含む)で完結させたかった Zend Frameworkでも作っている気配が無かったので作ってみた という感じです。わりと無駄なものを作るのが好きなきらいがあります。 メリットとしては ZFが使える環境ならどこでもログのローテーションできる 時間やサイズ以外でも、任意のタイミング、方法でローテーションができるように拡張可能 という感じでしょうか。あまりいい答えではないですね。。。 実際自分も、常にアプリ側でローテーションを行なっているかというとそうではなく、むしろlogrotateを使ってやっているケースのほうが多いです。 選択肢の一つとしてZend Frameworkのコンポーネントにあってもいいんじゃないかな、と思っているのが実際のところです。 先ほどのjunichiroさんのブログを見ると、一応よい好評もあったようなので、ほっとしています。 調子に乗ってプロポーサルしてみようかな、なんて思っています。 ソースはgithabにおきました。 ほかのものもおいてありますが、完全に自分用なのであまり使えないかもしれません。 使い方や拡張方法は次のエントリーで書いてみようと思っています。
  • [MySQL][勉強会]MySQLウィークリーセミナーに参加(パフォーマンスチューニング編)

    6月29日にMySQLウィークリーセミナーに参加してきました。 相変わらす、勉強会とかセミナーのまとめが遅いので反省です(PHP勉強会も残っているな。。。)。 当初の予想通りやはり人気があったらしく、急拠2回にわけて開催されることになりました。 最初の申し込みには間に合わなかったのですが、追加募集で滑り込むことができました。 パフォーマンスとは ・パフォーマンスの指標 スループット レスポンスタイム/レイテンシ(遅延) スケーラビリティ 上記の組み合わせ これらの指標について、平均値だけではなくばらつきも見る必要ある。 キューイング 複数のユーザ/リクエストがある場合に発生 レスポンスタイム = キューイングによる遅延 + 実行時間 ホッケースティック(システムが飽和状態になると、キューイングによる遅延が急激に増大する現象) パフォーマンスの改善時に、キューイングの遅延と実行時間のどちらを改善するか重要(実行時間の短縮がキューイングの遅延を改善する) 実行時間 ボトルネックの特定 ・ネットワーク ・CPU ・ディスク ・ロック ・… 間接的な計測 ・webページ表示のためのクエリ実行時間の合計 直接的な計測 ・CPU利用率 ・ディスクIOのレイテンシ ・ネットワークトラフィック ・処理待ちプロセス数 ・同時実行中のクエリ数 ・… ベンチマークテストの注意点 実行方法と、結果の読み取りを間違えると意味がなくなる バージョンを変えると改善していることも その他、ありがちな間違い ・データサイズが違う(本番10GBなのに1Gでテスト) ・データやリクエストのばらつきを考慮しない ・1ユーザだけでテストするとか ・実際の運用環境と違うアプリケーション特性下でのテスト ・ベンチマークテストのクライアントに負荷がかかっていて性能が出ない パフォーマンスチューニングをする際の注意事項 他の可能性を考える(メモリ増やすとか) 本当にそのパフォーマンスが必要かどうか 常に全体像を把握しておく(ボトルネックとか。) チューニングのプライオリティーを確認しておく ・全部をやることは多くの場合無駄 ・コストとのトレードオフ パフォーマンスチューニングTIPs MySQL アーキテクチャは以下のようになっている。``` クライアント ↓ コネクションスレッドプール ↓ クエリキャッシュ ↓ パーサー ↓ オプティマイザ ↓ ストレージエンジン
  • [MySQL][勉強会]MySQLウィークリーセミナーに参加(ストレージエンジン徹底比較編)

    もう先週のことですが、MySQLのウィークリーセミナーに行ってきました。無料セミナーで、しかも会社から徒歩数分の距離だったのでとてもよかったです。 今回の内容はMySQLストレージエンジンについての内容でした。 各ストレージエンジンの利用状況 MyISAMが70% InnoDBが60% Memoryが10% 他は5%以下 会場にいた人(50名くらい)のストレージエンジン利用状況は、InnoDB 3,4割、Memory数名、Archive 0名でした。 ストレージエンジンの選択 ストレージエンジンは用途によってパフォーマンスに違いが出るので最適なものを選択する必要ある(以下一例) ArchiveストレージエンジンのINSERT処理性能は、MyISAMの1.5倍、InnoDBの3.5倍ある(でもSELECTとINSERTしか使えない) CSVストレージエンジンでCSVファイルをMySQLにロードする場合、10億件のデータも0.00secでできると資料にあった(でもインデックス利用付加、トランザクション非対応。パフォーマンスもそれほどでもないらしい) などなど。。。 各MySQLストレージエンジンの説明 ・MyISAMストレージエンジン おなじみの、MySQLデフォルトのストレージエンジン テーブルを圧縮可能(圧縮後は読み取り専用) Fulltext、GISインデックス(調査)をサポート Concurrent Insert というテーブルロック中にもインサートできる機能をサポート ・InnoDBストレージエンジン MySQL5.1からはプラグインとして実装される。 トランザクション対応 サーバ障害後の自動リカバリ機能あり 外部キー利用可能 クラスタードインデックス ・Memory(旧HEAP)ストレージエンジン メモリ上に情報を格納するテーブルを作成。非常に高速。 メモリ上にデータとインデックス配置。ディスク上にはテーブル定義ファイルのみ(.frm) 固定長レイアウトのみ インデックスのアルゴリズム選択可能(HASHまたはBTREE) BLOB型およびTEXT型は格納不可 サーバが再起動したときにはデータは全て失われてしまう ・Blackholeストレージエンジン /dev/null的なストレージエンジン。これはどのような場面で使えるのか?``` master │ │ ↓ ↓ slave slave ←Blackhole ストレージエンジン │ │ ↓ ↓ slave… slave… 上のような構成でレプリケーションを行う場合、真ん中のslaveは次のスレーブにデータを受け渡すだけでデータ自体は保持する必要がないつまりバイナリログを受け渡す機能だけを提供したいような場面で使えるようである。 スレーブの台数がマスタに比べてすごく多いとき、レプリケーション遅延対策を行うような場合には使えそう。 **・FEDERATED** 別のサーバ上のテーブルに接続するテーブル。ローカルサーバに表の定義があって、リモートサーバに実データが格納されている。 ローカルサーバでの定義 CREATE TABLE foo … ENGINE=FEDERATED CONNECTION='mysql://user@host/db/table’
  • [勉強会] 1000speakers4のまとめ

    聞く人で行ってきました。 会場 製図室みたいな雰囲気だった。仕事しやすそうです。 基調講演 デブサミのつくり方 岩切晃子さん 2003年から始まった。2002年から準備をしていた 祭りを10年続けたら、世の中が変わるのではないかという仮説があった 最終的な野望。世の中が変わること。 Developper->CTO、CIO Developper->ビジネスモデルを生む人 Developper->幸せシステムを作る人 長く続けることが本当に大切ですよね。ぜひうまくいってほしいです。 もし世の中が変わったら、志向的に私は2番目辺りにいそう(程度の差はあれ)。 jj1bdxさん - Learning Erlang - from a Prolog dropout’s perspective Erlangについて 今の環境で十分早く動く動く webサーバー ATM(Asynchronous Transfer Mode)のパケット交換 などで使われている(結構使われているのですね)。 cとはだいぶ違う IPv6 アドレスの文字列処理実演 プログラマはこれから並列処理を学ばなければならない。 →勉強します。 hogelogさん - Wannabe ProgrammerからReal Programmerにいたるまで ワナビープログラマ →プログラムを書きたいのに特に作りたいものがないのでその先に進まない人(hello world++) hello Worldとかは面白くないからもうやめたほうがいい。 自分で言語処理系を実装するしかない brainf*ck 1つのおおきな配列と、ポインタが1つ チューリング完全 ワナビーコミッタという人はいるのだろうかとふと思った。 kuzuhaさん - Flash Player 間で通信 オレオレ通信規約でFlash Player間で通信 IRCサーバを介す 質問で色々突っ込まれてしまいましたが、新たな発想でがんばってください。 issmさん - ニコニコ動画における「笑い」の可視化について淡々と めがねラボLLPのひと にこぐらふのしくみなど