とりあえず購入日記再開.
くるねこ 著者: くるねこ大和
出版日: 2008-01-15
出版社/メーカー: エンターブレイン
カテゴリ: Book
くるねこ 2 著者: くるねこ 大和
出版日: 2008-06-20
出版社/メーカー: エンターブレイン
カテゴリ: Book
くるねこ 3 著者: くるねこ大和
出版日: 2008-12-20
出版社/メーカー: エンターブレイン
カテゴリ: Book
蟲師(10) (アフタヌーンKC) 著者: 漆原 友紀
出版日: 2008-11-21
出版社/メーカー: 講談社
カテゴリ: Book
ピアノの森(16) (モーニング KC) 著者: 一色 まこと
# apt-get install libmagick9-dev # gem install rmagick
というわけで行ってきました.かなり大勢の人が来ていたので,かなり熱い戦いカンファレンスになりました.聞いてきたセッションのほとんどが英語だったので,もう少しヒアリングできればなと,少し後悔しています.
かなり長いのですが,2日分のログを.
##基調講演
ビジネスボリュームはかなり大きくなっている. ##創設者 David の挨拶
History
1982 First database code 1995 MySQL code 1996 public release 2001 ‘Real’ Company start 2008 Sun acquires MySQL 特徴
Pluggable Storage Engines それぞれに特徴あるストレージエンジンを,状況に応じて使い分けることができる しかし Connector/Parser などは共通なので開発者に優しい Storage Engines
External Archive InnoDB PBXT InfoBright automatic indexing NitroSecrity IBM DB2 Internal Falcon Maria MyISAM の上位番 Data Warehousing Appliance
Kickfire たくさんのイノベーションを自由に利用できるのが MySQL の特徴
#[MySQL]MySQL ユーザカンファレンス 2008 2nd Day ##MySQL Performance Tuning #1 ###Introduction
Through put どこに問題が 輻輳 Slow queries インデックスの問題 書き直したほうがいいんじゃないか Optimizerがどう動くのか Application Roundtrips ##The Slow Query Log
遅いクエリーを記録するログ 問題 どの部分が遅いのかがわからない INFORMATION_SCHEMA が出てくるときがある Details Execution TIme 実行された時間にをみる User Account 誰が実行しているのか Query_time 全実行時間 Lock_time ロック時間 SET timestamp= サーバで実行された timestamp 5.1 では テーブルに保存できる 再起動なしに On/Off ミリ秒まで可 全ログを記録可能 Configurations long-queries-not-using-indexes インデックス使わないクエリー min-examined-ro-limit 最小行数 mysqldumpslow Slow Query の統計をとることができる ログ中の統計 全実行時間 平均実行時間 ###EXPLAIN Basics
まず thread safe にする設定は config/environments/production.rb にある
# Enable threaded mode # config.threadsafe! からなので,これを調べると railties/lib/initializer.rb の def threadsafe! self.cache_classes = true self.dependency_loading = false self.action_controller.allow_concurrency = true self end なので,actionpack/lib/action_controller/base.rb を見ると
@@allow_concurrency = false cattr_accessor :allow_concurrency とあるだけ.ならばと rak ‘allow_concurrency’ とかやってみると
activerecord/test/cases/pooled_connections_test.rb 79| def test_allow_concurrency_is_deprecated 80| assert_deprecated('ActiveRecord::Base.allow_concurrency') do 81| ActiveRecord::Base.allow_concurrency 83| assert_deprecated('ActiveRecord::Base.allow_concurrency=') do 84| ActiveRecord::Base.allow_concurrency = true activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb 181| # * <tt>:allow_concurrency</tt> - If true, use async query methods so Ruby threads don't deadlock; otherwise, use blocking query methods.
続き.actionpack/lib/action_controller/dispatcher.rb を見ると
5 | @@guard = Mutex.new 104 | def dispatch_unlocked 105 | begin 106 | run_callbacks :before_dispatch 107 | handle_request 108 | rescue Exception => exception 109 | failsafe_rescue exception 110 | ensure 111 | run_callbacks :after_dispatch, :enumerator => :reverse_each 112 | end 113 | end 114 | 115 | def dispatch 116 | if ActionController::Base.allow_concurrency 117 | dispatch_unlocked 118 | else 119 | @@guard.synchronize do 120 | dispatch_unlocked 121 | end 122 | end 123 | end と言うことなので,いままでは Mutex で共有ロックかけてるのがわかる.んで,dispatch_unlocked が呼び出されて,例えば development 環境であれば run_callbacks :before_dispatch から reload_application が実行されたりする.
次は ConnectionPool について.ひとまず関連部分を出すために % rak ‘ConnectionPool’ –ruby で
activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb 19| # connection back in. ConnectionPool is completely thread-safe, and will 21| # as long as ConnectionPool's contract is correctly followed. It will also 24| # connection anyway, then ConnectionPool will wait until some other thread 57| class ConnectionPool 60| # Creates a new ConnectionPool object. +spec+ is a ConnectionSpecification 63| # this ConnectionPool. 65| # The default ConnectionPool maximum size is 5.
と言うことは,threadsafe! によっては
ActionController 側では同期しなくなっただけ. ActiveRecord 側では,ConnectionPool によって接続を使いまわすようになっただけ. かな?
次は IRC で上がってた http://m.onkey.org/2008/10/23/thread-safety-for-your-rails を読んでみる.
get/post などの前に,
@request.user_agent = "DoCoMo/2.0" としてユーザエージェントを設定する.@request.env[‘USER_AGENT’] では,TestRequest 生成時に上書きされた値が使われてしまうようだ.
日曜に参加してきました.そして初懇親会だったのですが,かなり楽しかったです.皆さんお疲れ様でした.
##まとめ
gettextとi18nのどっちにすべきだろうか. Rails 2.2でとりあえず作っておいた方がいいかな. リファレンスマニュアルには秘密がたくさん.もっと読もう. ##セッション
前半 Rails 2.2 をほげる@松田さん Scaffoldの半歩先へ@Yuumi3 後半 plugin について語る リファレンスマニュアルを読む ==== ##Rails 2.2 をほげる
Rails 2.2.0 がでた http://guides.rubyonrails.org/2_2_release_notes.html RC1 扱い 特徴
Internationalization 高速化 Internationalization
省略 RoR がマルチスレッド化
ETagサポート
Connection Pooling
Thread Safe なので Connection 使い回さないと大変なことに Memoizable
インスタンス変数へキャッシュする def full_name @full_name ||= "#{first_name} #{last_name}" end --after-- def full_name "#{first_name} #{last_name}" end - @full_name へキャッシュされて,2回目以降に文字列結合は実行されない. - 更新するときは,full_name(true) で. PostgreSQL 使うと db:migrate で失敗しても Rollback するようになった. config.