タグ

MySQLに関するcelt69cobraのブックマーク (70)

  • ソーシャルゲームスケールアウトの歴史

    Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法

    ソーシャルゲームスケールアウトの歴史
  • Using filesort

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

    Using filesort
  • 「MySQL Casual Talks vol.1」に参加してきたよ、のメモ - 元RX-7乗りの適当な日々

    あまりカジュアルではなかったwという説もありますが、結構面白かったです。 1人の発表が10分と、LT(Lightning Talks)風な感じだったこともあり、聴くのに必死だったのですが、少々メモを取ったので貼り付けておきます。(取れたところは少ない...) # 間違っている部分もあるかもしれませんが、そこはご了承を。 # きっと近いうちに皆さんの発表資料が出揃うだろうとは思いますが。出揃ったらリンク付けようw ちなみに、余談ですが懇親会も、かなり盛り上がって楽しかったですね! 個人的には、前から色々お世話になっていた、"刺身☆ブーメラン"の金子さん(id:a666666 / @kyanny)と色々お話できたのは良かったです。 show innodb status (@myfinder) show innodb status from Tatsuro Hisamori 呼び方: いのでーび

    「MySQL Casual Talks vol.1」に参加してきたよ、のメモ - 元RX-7乗りの適当な日々
  • MySQL :: MySQL 5.1 リファレンスマニュアル :: 6.2 SELECTステートメントおよびその他のクエリの最適化

    第 1 にすべてのクエリに影響を及ぼすことが 1 つあります。アクセス権システムのセットアップの複雑性が増すほど、オーバヘッドも増加します。 GRANTステートメントを発行する際に単純なアクセス権を使用することで、クライアントがステートメントを事項する際のMySQLにアクセス権確認オーバーヘッドを減らすことができます。例えば、テーブルレベルやカラムレベルの特権を許可したくない場合、サーバはtables_privとcolumns_privテーブルの内容を確認する必要はまったくありません。同じように、どのアカウントにもリソース制限を設けない場合、サーバは性能リソースカカウンティングを行う必要がありません。大量の処理が必要なときは、GRANT を使用しないことで時間を節約できる場合もあります。 明示的な MySQL 関数に関わる問題がある場合は、常に mysqlクライアントでBENCHMARK(

  • http://www.mysqlpracticewiki.com/index.php/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8

  • MySQL5.5.3-m3のDATETIME型のバグ。あとMySQLの DATETIME型は本当に遅いのか検証してみた - 2010-04-30 - 小野マトペの業務日誌(アニメ制作してない篇)

    バグの話 近々ふぁぼったーDBのInnoDB化を企てているので、それに伴いMySQL5.0.67(Tritonn)から、先日リリースされたばかりのMySQL5.5.3-m3に乗り換えてみた。RC(リリース候補)版ということで、GA版とほぼ変わらない品質と聞いたので、割と軽い気持ちでインストールしたんだけど、いきなりバグにハマった。 バグとは、DATETIME, TIMESTAMP, DATE, TIME型と文字列定数との結合でインデックスが使われない、というもの。 以下のような、date(DATE型)の結合しかしていないクエリでも、dateインデックスが使われず昇順フルテーブルスキャンされ、20秒くらい掛かった。 select date from STATUS force index(date) where date='2010-01-19' limit 10; この現象は、5.5.3,5

    MySQL5.5.3-m3のDATETIME型のバグ。あとMySQLの DATETIME型は本当に遅いのか検証してみた - 2010-04-30 - 小野マトペの業務日誌(アニメ制作してない篇)
  • MySQL のNULL ではまったことあれこれ - LukeSilvia’s diary

    MySQL に限らず、SQL のNULL の仕様には何回か「えっ」と驚くことがあったのでメモしておこうと思います。5.1 版の日語マニュアルがなかったものについては、4.1 のマニュアルを参照しました。 そもそもNULL は何を意味するか NULL は未定義または、不明を意味する。「電話番号を持たない」ということを表現する場合は、NULL ではなく、空の文字列を使う。 NULL 値というものを SQL 初心者はよく混乱します。SQL 初心者は、多くの場合、NULL が空文字 "" と同じであると考えてしまいます。これは違います。たとえば、以下のステートメントは完全に別のものです。 mysql> INSERT INTO my_table (phone) VALUES (NULL); mysql> INSERT INTO my_table (phone) VALUES (""); どちらのス

    MySQL のNULL ではまったことあれこれ - LukeSilvia’s diary
  • Loading...

  • MySQL インデックス - kozy.heteml.jp

    テーブル作成時 † mysql> CREATE TABLE index_test_tbl1( -> id INT PRIMARY KEY AUTO_INCREMENT, -> name CHAR(50), -> INDEX idx(id) -> ); ↑ 既存テーブルにインデックスを追加 † CREATE INDEX インデックス名 ON テーブル名(フィールド名); mysql> CREATE TABLE index_test_tbl2( -> id INT PRIMARY KEY AUTO_INCREMENT, -> name CHAR(50) -> ); Query OK, 0 rows affected (0.01 sec) mysql> CREATE INDEX idx ON index_test_tbl2(id); Query OK, 0 rows affected (0.04

  • http://www.mysqlpracticewiki.com/index.php/Extra_field

  • http://www.mysqlpracticewiki.com/index.php/Record_access_types

  • MySQLのEXPLAINを徹底解説!!

    以前、MySQLを高速化する10の方法という投稿で「EXPLAINの見方についてはいずれ解説しようと思う」と書いてしまったので、今日はその公約?を果たそうと思う。 MySQLのチューニングで最も大切なのは、クエリとスキーマの最適化である。スキーマの設計は一度決めてしまうとそのテーブルを利用する全てのクエリに影響してしまうためなかなか変更することは出来ないが、クエリはそのクエリだけを書き直せば良いので変更の敷居は低い。そして遅いクエリをなくすことは、性能を大幅に向上させるための最も有効な手段である。従って、アプリケーションの性能を向上させたいなら、まず最初にクエリのチューニングを検討するべきなのである。 最適化するべきクエリはスロークエリログやクエリアナライザで見付けられるが、ではそのようなクエリが見つかった場合にはどのように最適化すればいいのか?そのためにはまず現在どのようにクエリが実行さ

    MySQLのEXPLAINを徹底解説!!
  • MySQL レプリケーションの設定 - maruko2 Note.

    MySQL レプリケーションの設定 提供:maruko2 Note. 移動: 案内, 検索 目次 1 MySQL レプリケーションの特徴 2 MySQL レプリケーションの動作概要 3 レプリケーションのセットアップ 3.1 レプリケーション用の my.cnf 設定 3.2 マスターにレプリケーション専用のユーザーを登録する 3.3 マスターサーバのスナップショットを作成する 3.4 マスターサーバのスナップショットを元に、スレーブを作成する 4 レプリケーションが正常に行われているか確認する方法 5 マスターのバイナリログの削除 6 参考ページ 7 MySQL 関連のページ MySQL レプリケーションの特徴 MySQL のレプリケーションは非同期。 1つのマスターに対して、1つ以上のスレーブが可能。 更新系のクエリはマスターのみで実行しなければならい。更新系クエリをスレーブで実行すると

  • MySQL DBマスタのDC間移設 | Ore no homepage

    システムをデータセンターAからデータセンターBに論理移設を行うときのメモ。 肝になるのはDB、特にマスタDBだと思うので、主題の通りおもにDBマスタの切り替えに焦点を当てて手順を書く。 移設先であるデータセンターBではサーバ構築やアプリケーション/コンフィグのデプロイは完了していて、新マスタおよび全スレーブは現マスタにレプリを張っている状態からスタートする。新マスタにはバイナリログ出力など、DBマスタとして振る舞うための設定が入っているものとする。 手順の要約 現DBマスタへの更新クエリをすべてブロックする 全てのスレーブと新マスタでshow slave statusしてログとポジションが一致していることを確認する 新マスタと全てのスレーブでstop slaveする 新マスタと全てのスレーブでreset slaveする 新マスタでreset masterする 全てのスレーブでchange

  • mysqldumpの--order-by-primaryオプションについて - SH2の日記

    TIPSです。このようなテーブルがありまして、 CREATE TABLE `link` ( `id1` int(11) NOT NULL DEFAULT '0', `id2` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`id1`,`id2`), KEY `ix1` (`id2`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;データは以下のような感じで、このときは2,900万レコードありました。 +---------+---------+ | id1 | id2 | +---------+---------+ | 5 | 69 | | 5 | 1022 | | 5 | 1487 | … | 1081 | 2021414 | | 1081 | 2087813 | | 1082 | 11 | | 1082 | 225

    mysqldumpの--order-by-primaryオプションについて - SH2の日記
  • INDEX FULL SCANを狙う - MySQL Casual Advent Calendar 2011 - SH2の日記

    2011年8月のkazeburoさんのエントリに対する解説記事です。結論から言うとkazeburoさんの案に賛成なのですが、日はどうしてそうなったのかというところを確認していきたいと思います。記事はMySQL Casual Advent Calendar 2011の17日目のエントリです。16日目はakira1908jpさんでした。 当時の内容を覚えていない方は、先にkazeburoさんのエントリをご一読ください。また、テストケースがGitHubに公開されていますのでカジュアルに再現試験をすることも可能です。 Covering Index と self-joinMySQL - blog.nomadscafe.jp kazeburo's gist: 1150842 - Gist 問題のSQLをチューニングするには、MySQLがインデックスに対してどのようにアクセスするかという点につ

    INDEX FULL SCANを狙う - MySQL Casual Advent Calendar 2011 - SH2の日記
  • SQL_SLAVE_SKIP_COUNTERについて教えてもらったよ - 愛と勇気と缶ビール

    何らかの理由でmasterとslaveの間で不整合があって、「既にテーブルがある」とか「UNIQUE制約にひっかかる」とかそういう理由でreplicationが止まっている時は、 SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; start slave; show slave status; (確認)って風に一つスキップするんだよ、ってnekokakさんに教えてもらったよ。 普通は慎重を期して1つずつスキップするものらしいんだよ。 こんなのDBの運用とかバリバリやってる人にとっては当たり前かもしれないけど、そんなので一々恥ずかしがってたら前に進めないのでblogに書くんだよ。 で、MySQL 5.0の該当リファレンス↓ http://dev.mysql.com/doc/refman/5.0/en/set-global-sql-slave-skip-counter

    SQL_SLAVE_SKIP_COUNTERについて教えてもらったよ - 愛と勇気と缶ビール
  • プロファイリングで快適MySQLチューニング生活

    MySQL 5.1からデフォルトで有効になっている便利な機能としてプロファイリングというものがある。MySQL 5.0でも利用出来たのだが、実験的な機能という位置づけであり、搭載されていたのはGPL版のMySQL Community Server限定だった。MySQL 5.1からは全てのエディションでプロファイリングを利用することができる。 プロファイリング機能を利用すると、クエリの状態(特に状態遷移やリソースの消費状況)を詳細に分析できるのでとても便利だ。MySQLエンジニア必携の機能といって良いだろう。というわけでプロファイリング機能の使い方を説明しよう。 MySQLサーバにログインしたら、まずは次のようにしてプロファイリングを有効にする。 mysql> SET profiling=1; すると、クエリの情報が記録されるようになる。次に、分析したいクエリを実行する。クエリはなんでもいい

    プロファイリングで快適MySQLチューニング生活
  • mysqldump でカジュアルにデータのコピー - k12uのアレ

    MySQL Casual Advent Calendar 2011 22日目の記事です。 いろんなAdvent Calendarの敷居を下げたり、下げ過ぎたりしているid:k12uです。 実はいろんなことに使えるみんな大好きmysqldump。 あるhost.db.tableのデータの一部を他のhost.db.table にカジュアルに移したいといったケースのために大変重宝しております。 意外とあまり知られていない "-w" オプションを使うことでSQLでおなじみの絞り込みができます。 -w 'row_id = 111' #重要ですこのような感じでデータの出力を確認し、OKならパイプで直接 mysqlコマンドにわせることで簡単にデータコピーできます。 さてこんな便利な mysqldump ですがオプションを調べようとしてターミナルでmysqldump --help と打とうものなら大量の

    mysqldump でカジュアルにデータのコピー - k12uのアレ
  • MySQLに対して、カジュアルにやってはいけない事をやってみよう[追記アリ] - oranie's blog

    ※ブクマコメントで指摘頂いた箇所を追記しました>< MySQL Casual Advent Calendar 2011 21日目の記事です。 前日は@sohgohさんの 「MySQLのUDFでカジュアルにファイル操作【MySQL Casual Advent Calendar 2011 20日目】」 でした。図や動画もあって見やすいですね! 改めて自己紹介です。21日目を担当する、今回のカレンダーでNo.1カジュアルの座を狙っているid:oranie(オラニエ)です。 今回はMySQLもそこそこで、僕の名前の正しい読み方だけを覚えてくれれば今日は大丈夫です。 意図的に間違えている人もたまにいますが、心が汚れすぎていると思うのでお寺で座禅とかした方がいいと思います。 今までの記事を拝見させて頂き、みんな真面目に色々Tipsを書いているのでニッチ狙い&初心者の僕は 「MySQLに対して、カジュア

    MySQLに対して、カジュアルにやってはいけない事をやってみよう[追記アリ] - oranie's blog