タグ

studyとperformanceに関するraimon49のブックマーク (78)

  • ホント信じられないDB文化だけど、統計情報固定化はマジでアリ - レベルエンター山本大のブログ

    信じられないDB文化「固定長DB」でもあうんです。大規模コンシューマ向けサービスのRDB設計 - 山大の日記に引き続き、大規模コンシューマ向けサービスのRDBの意外な使い方について。 僕らのサービスでは、統計情報を手作業でセットして固定化していた。 こんなことは普通やらないけれど、しかしながら非常にシステムのパフォーマンスを安定させるのに効果があった。 Oracleの統計情報(オプティマイザ統計情報)とは まず統計情報とは何かというところから始める。 統計情報とは、正式名称「オプティマイザ統計情報」といい、OracleSQLを解析して最適な実行計画を作成するために利用する情報である。 実行計画を作成する機能のことをCBO(コスト・ベース・オプティマイザ)という、このオプティマイザ向けの統計的な情報だから、オプティマイザ統計情報と呼ばれる。 統計情報の実体は何かというと、データベースの各

    ホント信じられないDB文化だけど、統計情報固定化はマジでアリ - レベルエンター山本大のブログ
    raimon49
    raimon49 2011/09/11
    このシリーズ本当に面白い。
  • Python のセットがすごい

    ~$ python -m timeit -n 1000 "[x for x in range(1000) if x in range(500, 1500)]" 1000 loops, best of 3: 28.2 msec per loop ~$ python -m timeit -n 1000 "set(range(1000)).intersection(range(500, 1500))" 1000 loops, best of 3: 120 usec per loop リスト内包が約235倍時間かかりますね。リストをセットにするのも時間かからないので、合併や、交差は絶対 set() を使ったほうがいいですね。 Update range(500, 1500) を 1000回くらいよばれてしまっているので、一回呼び出すようにすると、 28.2msec が 18.2msec になった。ま

    raimon49
    raimon49 2011/09/08
    リスト内包 vs set()
  • #isucon ではどんなことを考えながら作業していたか - 酒日記 はてな支店

    前のエントリ #isucon で優勝してきました は当日夜に酔っ払った頭で勢いで書き上げたので、少し冷静に振り返ってまとめてみます。 最初のボトルネック発見 DBCPU 4コアをフルに使って回っているのですぐに Query が重いのは分かった 重いクエリはキャッシュすれば、という発想は自然 (実際 MySQL のクエリキャッシュだけでスコアは 1.5倍程度上がる)、とはいえ このクエリは実行に 300〜400 ms 程度かかる アプリケーションの要件上、毎秒更新する必要がある 1秒ごとに更新に 0.3〜0.4秒かかる処理をするのは悪手だろう cache が消えてから生成、とすると生成処理が複数同時に走って無駄が大きい (実際ベンチマーク中の slow query を見ると 600〜700 ms 程度の時間が掛かっていた) ということで、DB のテーブル構成を変更して高速化できないか、

    #isucon ではどんなことを考えながら作業していたか - 酒日記 はてな支店
    raimon49
    raimon49 2011/08/29
    問題の切り分けと判断のスピードがすごい
  • #isucon で優勝してきました - 酒日記 はてな支店

    なんでもありのWebアプリケーション高速化バトル、#isucon に会社の同僚 @Songmu @sugyan と3人で、fujiwara組として参戦してきました。結果、幸いにも優勝を勝ち取ることが出来ました。 こんなに楽しいイベントを企画、運営していただいた Livedoor の皆様、当にありがとうございます!! さて、ざっとチューニングした経過などを記録しておきます。 [追記] もっと詳しいレポートを @Songmu が上げているのでそちらもご覧ください おそらくはそれさえも平凡な日々: #isucon で優勝させてもらってきました [さらに追記] #isucon ではどんなことを考えながら作業していたか - 酒日記 はてな支店 自分でももう少し詳しく振り返りエントリ書きました。 まず説明を聞いて、環境を作るところから。IPアドレスでは作業がしにくいし事故も起こりそうなので、host

    #isucon で優勝してきました - 酒日記 はてな支店
  • JavaScriptの文字列を反転する10の方法とそのパフォーマンス - 風と宇宙とプログラム

    はじめに JavaScriptで文字列を反転する10の方法を(無理矢理?)思いついたので、ちょっと簡単に紹介したい。また、それぞれについて、各ブラウザでパフォーマンスを測定してみたので、その結果も合わせて載せる。 文字列のStringオブジェクトには、部分切り出し(substring, slice)や置換(replace)、連結(concat)など豊富な機能があるのに、反転(reverse)機能はない。Arrayのreverseはあるのに、Stringのreverseがないのはどうしてなのだろうか。 各ブラウザとそのバージョンは以下の通り: Chrome Firefox Opera Safari IE 13.0.782.112 m 6.0 11.50 5.1(7534.50) 8.0.7600.16335 rev01: C言語的発想 空の配列を作って、そこに元の文字列の後ろから1文字つづ入

    JavaScriptの文字列を反転する10の方法とそのパフォーマンス - 風と宇宙とプログラム
    raimon49
    raimon49 2011/08/22
    06以降がどんどんマニアックになってて面白い。Chromeの得手不得手や、各ブラウザで+オペレータが賢くなってることが良く分かる。自分では03までしか思い付かないけど…。
  • Covering Index と self-join と MySQL - blog.nomadscafe.jp

    某サービスのクエリチューニングのお話。 ブログとか日記とかそういうサービス系で次のようなテーブルがあったとします。 CREATE TABLE entries ( id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, user_id INT UNSIGNED NOT NULL, posted_by TINYINT UNSIGNED NOT NULL, --#PC、mobileなどどこから投稿されたかのフラグ title VARCHAR(512) NOT NULL, body TEXT NOT NULL, created_at DATETIME NOT NULL, updated_at TIMESTAMP NOT NULL, status TINYINT UNSIGNED NOT NULL, INDEX (user_id,created_at

  • #2 CPythonについてのハンズオン、講演 | gihyo.jp

    前回は基調講演とカンファレンスの全体像について紹介しました。今回と次回ではPythonそのものの講演について紹介したいと思います。 今回はCPythonというC言語で実装されたPythonの講演(一般的にPythonというときはCPythonを指します)について紹介します。 CPython CPythonの講演で紹介するのは、すべてRaymond Hettinger氏が発表されたことについてです。Raymond氏の講演は、Pythonでコーディングする上でのテクニックや考え方など、どれも示唆に富む内容で筆者にとっては興味深かった内容でした。 Raymond Hettinger氏 ※ 特に注記がない場合、サンプルコードはPython 2.7.2で実行しています。 Advanced Python: 高度なPythonテクニック 「Advanced Python」というハンズオントレーニングでは

    #2 CPythonについてのハンズオン、講演 | gihyo.jp
    raimon49
    raimon49 2011/07/15
    collectionsモジュール余り使ったことが無かった。
  • 今こそ見直すApacheの設定 - blog.nomadscafe.jp

    nginxやvarnishなどがアツいですが、Apacheもまだまだ実績や安定性から採用されていると思います。ここではデフォルトとは異なる値に変更するサーバ設定を中心に、パフォーマンス改善、安全性向上のためのApacheの設定を紹介します。 mpmの確認 > /path/to/bin/httpd -V Server version: Apache/2.2.19 (Unix) Server built: Jun 23 2011 17:13:13 Server's Module Magic Number: 20051115:28 Server loaded: APR 1.4.5, APR-Util 1.3.12 Compiled using: APR 1.4.5, APR-Util 1.3.12 Architecture: 64-bit Server MPM: Worker PreforkやW

    raimon49
    raimon49 2011/07/06
    惜しげもなく公開されてる
  • 【18-C-4】Google App Engine - 無限の彼方へ

    2. App Engine to infinity and beyond Takashi Matsuo Google, Inc. Feb 18, 2011 3. 自己紹介 松尾貴史 @tmatsuo App Engine Developer Advocate Kay's Daddy http://code.google.com/p/kay-framework/ 5. App Engine のこれまで 3 年 - 進化を続けるプラットフォーム Apr 2008 Python launch May 2008 Memcache API, Images API Jul 2008 Logs export Aug 2008 Batch write/delete Oct 2008 HTTPS support Dec 2008 Status dashboard, quota details Feb 200

    【18-C-4】Google App Engine - 無限の彼方へ
    raimon49
    raimon49 2011/02/22
    >非正規化を嫌がらない
  • もっと速くするために(スコープ解決コストと正規表現オブジェクトの置き場所) - latest log

    正規表現オブジェクトをどのように配置すれば効率的なのか調べました。 配置パターン A. ループ内にべた書き function job(expr, n) { var i = 0, match; for (var i = 0; i < n; ++i) { match = /regexp1/.exec(expr); match = /regexp2/.exec(expr); } } B. スコープ内(ループの外)に配置 function job(expr, n) { var i = 0, match, REX1 = /regexp1/, REX2 = /regexp2/; for (var i = 0; i < n; ++i) { match = REX1.exec(expr); match = REX2.exec(expr); } } C. 5つ外側のスコープに配置 (function() {

    もっと速くするために(スコープ解決コストと正規表現オブジェクトの置き場所) - latest log
    raimon49
    raimon49 2011/02/22
    繰り返し使う正規表現オブジェクトは、見付ける手助けをしてやる。
  • Pythonで末尾再帰最適化をする。 - IT系で覚醒めたい

    Pythonは最強ですね。文法はチョー簡単、ライブラリも充実度がすごい、それでいてメタプログラミングができる。そのメタプログラミングを使うと末尾再帰最適化までできるそうです…おそろしやNew Tail Recursion Decorator « Python recipes « ActiveState Code class tail_recursive(object): def __init__(self, func): self.func = func self.firstcall = True self.CONTINUE = object() def __call__(self, *args, **kwd): if self.firstcall: func = self.func CONTINUE = self.CONTINUE self.firstcall = False try:

    raimon49
    raimon49 2011/01/23
    デコレータで再帰を最適化するレシピ。
  • ソーシャルゲームのためのMySQL入門 | BLOG - DeNA Engineering

    こんにちはこんにちは。最近お腹痛いばっかり言ってることで有名なiwanagaです。 DeNAは外部的にはプラットフォーム的な部分の方がフィーチャーされることが多いですが、実はソーシャルゲームの提供も行っています。怪盗ロワイヤルとか、どこかで聞いたことがあるのではないでしょうか。 僕はDeNAでソーシャルゲームが誕生した辺りからずっとサーバサイドを見てきましたが、そんな運用の中で自分が貯めてきた知見とかTIPSをご紹介したいと思います。 かれこれ10タイトル近くはレビューしたり運用したりしてるため結構言いたいことはいっぱいあるので、小出しにしつつ評判よければ次も書きます。 ソーシャルゲームのためのMySQL入門一覧 ソーシャルゲームのためのMySQL入門 - Technology of DeNA ソーシャルゲームのためのMySQL入門2 - Technology of DeNA 「MySQL

    ソーシャルゲームのためのMySQL入門 | BLOG - DeNA Engineering
    raimon49
    raimon49 2010/11/16
    InnoDBで大規模データをストアする際のコツ、パーティショニングの利点紹介など。ログ系のテーブル設計の勘所や採番テーブルによるid払い出しは、ソーシャルゲームに限らず普遍的に役立つDB設計の基礎知識。軽妙な語り
  • YAPC::Asia 2010 / Studying HTTP with Perl

    TopicsPlaceHolder SectionTitlePlaceHolder TIME rest time current/total

  • 大人のためのInnoDBテーブルとの正しい付き合い方。

    InnoDB関連でよくある質問のひとつに「テーブルのメンテナンスは何をすればいいんですか?」というものがある。InnoDBMySQL 5.5でデフォルトストレージエンジンとなるため、InnoDBのテーブルメンテナンス計画を立ようと思う機会も増えることだろう。そこで、今日はInnoDBのテーブルメンテナンスの各種方法となぜそうしなければいけないかという理由を解説しようと思う。 ANALYZE TABLEテーブルメンテナンスの代名詞といえば、インデックス統計情報の更新ではなかろうか。運用を続けるうちに、知らず知らずインデックス統計情報が狂ってしまい、思うような性能が出ない。RDBMSにはそのような問題がつきものであるが、InnoDBの場合、ANALYZE TABLEは不要である。なぜなら、InnoDBが自発的に統計情報を更新するからだ。InnoDBは以下の条件に適合すると、ANALYZE T

    大人のためのInnoDBテーブルとの正しい付き合い方。
    raimon49
    raimon49 2010/09/27
    InnoDBテーブル運用の基礎知識。ANALYZE TABLEは自動で走る, DELETEによる無駄な領域が多いときはOPTIMIZE TABLE
  • NoSQLの成功は1:10問題にかかっている:Kenn's Clairvoyance

    ここ2-3年ほど、いわゆる非SQL系データベースがホットな話題になってきています。このムーブメントを総称して「NoSQL (Not-only SQL)」と呼ばれることが多いようです。まるでSQLを否定しているかのような誤解を招きやすい用語ですが、かといってキー・バリュー型データストアや列指向DBを総称できる他の呼び方もないので、このエントリではNoSQLという用語を使うことにします。 OracleMySQLなどのSQLデータベースが成熟していく一方で、SQLデータベースを特徴づける弱点である柔軟性のなさ、堅牢さと引き換えに犠牲になった更新性能の低さ、スケールアウトの難しさなどから、「何でもかんでもRDB」から「目的に応じた永続化」が模索される流れになってきました。 時を同じくして、キャッシュサーバの世界でも、MemcachedのもつシンプルなAPIの使いやすさが評価される一方、LRUによ

    NoSQLの成功は1:10問題にかかっている:Kenn's Clairvoyance
    raimon49
    raimon49 2010/09/21
    「SQLデータベースは死んだ」論に感じるモヤモヤを丁寧に解説。分かり易い。Redisのスワップでディスクへ追い出してくれるのはvalueの部分だけなので、なるべくキーの数を少なく、キー長も短くしておくのがチューニング
  • Array に Hash を被せる(AOH) - latest log

    配列を返す関数は、素の配列を返すよりも、first や last などの付加情報も一緒に返すといいんじゃないかな。 というお話です。 たとえば FakeArray → Array NodeList や arguments は FakeArray(Array Like Object) と呼ばれる擬似配列です。 FakeArray には join() や push() などの便利なメソッドがないため、FakeArray を一旦 Array に変換する(↓)toArray のような関数が、どうしても必要になります。 # Array.prototype.slice.apply(fakeArray) を使うケースは説明しないよ 素の Arrayを返す toArray 関数 function toArray(fakeArray) { // @param Array/FakeArray: // @ret

    Array に Hash を被せる(AOH) - latest log
    raimon49
    raimon49 2010/08/09
    Array-LikeなオブジェクトをArrayに変換する際にメタ情報を被せてクリーンに。
  • 【Visual Studio Code】1.0 GAリリース予定日、決定! - 好きな技術を好きと言える幸せ - AYA TOKURA BLOG - Site Home - MSDN Blogs

    In Visual Studio 2022 17.10 Preview 2, we’ve introduced some UX updates and usability improvements to the Connection Manager. With these updates we provide a more seamless experience when connecting to remote systems and/or debugging failed connections. Please install the latest Preview to try it out. Read on to learn what the Connection ...

    【Visual Studio Code】1.0 GAリリース予定日、決定! - 好きな技術を好きと言える幸せ - AYA TOKURA BLOG - Site Home - MSDN Blogs
    raimon49
    raimon49 2010/08/02
    検査例外(Checked Exception)と実行時例外(Runtime Exception)のうち、.NETで扱える例外は後者のみである点のメリット・デメリット、Javaとの比較など。SqlExceptionはJavaでは検査例外だが.NETでは実行時例外という違いも。良記事。
  • 高速化 - latest log

    昨日がベンチマークだったので、今日は速度について。 いつまで教科書を信じてるんだい? プログラミングの教には、「ループ」がこのように書かれています。 これはよく見られる記述ですが、最も遅い書き方です。 var ary = [...]; var i; for (i = 0; i < ary.length; i++) { なにか }ループ毎にlengthを再評価しなければ、ちょっと早くなります。 var ary = [...]; var i; var sz = ary.length; for (i = 0; i < sz; i++) { なにか }i++ を ++i にするとさらに早くなります。 var ary = [...], i = 0, sz = ary.length; for (; i < sz; ++i) { なにか }これらの些細な修正を施すだけで、単純ループなら5〜8%は高速化

    高速化 - latest log
    raimon49
    raimon49 2008/10/27
    前置インクリメント化, ループ展開