タグ

2013年9月30日のブックマーク (5件)

  • Using filesort

    去年ソートに関する記事を書いたが、今日はその続きである。 MySQLでEXPLAIN SELECT...を実行するとExtraフィールドでよく見かける「Using filesort」という文字列。Filesortって一体なんだろう?と思ったことはないだろうか。単刀直入に言ってFilesortの正体はクイックソートである。 クエリにORDER BYが含まれる場合、MySQLはある程度の大きさまでは全てメモリ内でクイックソートを処理する。ある程度の大きさとはsort_buffer_sizeであり、これはセッションごとに変更可能である。ソートに必要なメモリがsort_buffer_sizeより大きくなると、テンポラリファイル(テンポラリテーブルではない)が作成され、メモリとファイルを併用してクイックソートが実行される。 Filesortは全てのソート処理において実行されるわけではない。前回の記事

    Using filesort
    willnet
    willnet 2013/09/30
    Using filesort はクイックソート。sort_buffer_sizeまではメモリでソートし、それ以上はテンポラリファイルとメモリでソートする。インデックスが使えればソートする必要がなくなり速くなる
  • オトコのソートテクニック2008

    今日は仕事納めだったので、一年の締めくくりとしてMySQLにおけるソートの話でもしようと思う。 インデックスを利用しないクエリで最もよく見かけるもののひとつは、ORDER BYを用いたソート処理だろう。もし、ソート処理においてインデックスを用いることが出来れば、MySQLは結果を抽出してから結果行をソートするのではなく、インデックス順に行を取り出せば良いので高速にソート処理することが可能になる。特に、LIMIT句やWHERE句を用いて行の絞り込みを行う場合は効果が絶大である。しかし、ひとたびインデックスを利用できない状況に直面すると、たちまちテーブルスキャンが発生して性能が劣化してしまう。 例えば、100万行のレコードを格納したt1というテーブルがあるとする。そのテーブルに対して以下のようなクエリを実行した場合を考えよう。 mysql> SELECT col1, col2 ... colx

    オトコのソートテクニック2008
    willnet
    willnet 2013/09/30
    WHERE句によって行数を十分に少なく絞り込むことが出来るのであればORDER BYにおいてインデックスを用いることなどは考慮しなくても良い
  • たった3秒でInnoDBのデータローディングが快適になるライフハック

    MySQLに限った話ではないが、データベース管理システムに大量のデータを投入するのは時間が掛かり大変苦痛を伴う作業である。劇的に効能があるわけではないが、MySQLを利用しているとき、特にInnoDBを使っている場合にはデータの投入を高速化するためにいくつかテクニックがあるので紹介しよう。皆さんの作業時間が短縮され、少しでも早く帰路に着いたりサービスインさせたりという形でお役に立てれば幸いである。ちなみに、タイトルはネタであるのだが、もし当に3秒で以下の全ての設定を行えた人が居たら教えて頂きたい! ログファイルサイズの調整データ投入時に限った話ではないが、ログファイルサイズを調整するのは更新性能にとって非常に重要なファクターである。バッファプールのサイズが重要なことに代わりはないが、同じぐらいログファイルのサイズも重要である。InnoDBはログファイルを使い切ってしまうと、バッファプール

    たった3秒でInnoDBのデータローディングが快適になるライフハック
    willnet
    willnet 2013/09/30
    大量のデータロードするときは innnodb_log_buffer_size を大きく、バイナリログをオフに
  • how to clear/flush mysql innodb buffer pool?

    I'm perf tuning a large query, and want to run it from the same baseline before and after, for comparison. I know about the mysql query cache, but its not relevant to me, since the 2 queries would not be cached anyway. What is being cached, is the innodb pages, in the buffer pool. Is there a way to clear the entire buffer pool so I can compare the two queries from the same starting point? Whilst r

    how to clear/flush mysql innodb buffer pool?
    willnet
    willnet 2013/09/30
    各種キャッシュを削除するための設定らしい
  • キャッシュもバッファもなにも使ってない状態のクエリの実行速度を知りたい。 - 速度的にちょっと問題がでてきて、MySQLのク... - Yahoo!知恵袋

    MySQLに限らず、プログラム実行時間を考えると 1.そこそこ大きいファイルを作業対象にすると、ハードディスクからの読みとりにも一定時間が掛かり、最近の大容量ハードディスクには、読みとりキャッシュが付いている。 つまり、読みとりキャッシュ内に残ってる限りは2回目以降の読みとり時間は早くなる。 別のアプリで同じディスク内の別の巨大ファイルを読み込んだりすると、読みとりキャッシュ内容が書き変わるので、またファイルアクセスに時間が取られてしまうかもしれません。 →マニュアル 「ディスク関連の問題」を参照してみてください http://dev.mysql.com/doc/refman/5.1/ja/disk-issues.html データ更新が頻繁だと、一つのファイルがハードディスク内で分散していることがあり、ファイルアクセスに時間が掛かる要因となります。デフラグもやっておきましょう。 2.大きな

    キャッシュもバッファもなにも使ってない状態のクエリの実行速度を知りたい。 - 速度的にちょっと問題がでてきて、MySQLのク... - Yahoo!知恵袋
    willnet
    willnet 2013/09/30
    クエリキャッシュだけじゃ無くて、HDDのキャッシュとかもあるの…