タグ

mysqlとMySQLに関するmattarinのブックマーク (136)

  • 結構使えるMySQLのTrigger機能!

    皆さん、ご無沙汰しております。 パソコン周辺機器にお金をかけはじめている笹亀です。 エンジニアはパソコンが商売道具なので、 やはり使いやすい物を使いたくなるのは自然な事ですね。 ご参考までに。。。 マウス  :Logicool MX Revolution(ビックカメラでポイントで購入 キーボード:Bluetooth Mac用キーボード(会社の人から売ってもらいましたw 今回はTriggerについてご紹介したいとおもいます。 Triggerとは、データの変更などのイベントによってあらかじめ指定した処理を自動的に実行する機能です。 最近使用しているデータベースには必ず備えてある機能です。 Oracle,Postgres,MySQLでも当たり前のようにあります。 実際にはどのようなときに使用するものなのでしょうか? ・特定のテーブルに対しての処理のログをとるため ・特定のテーブルのバックアップを

    結構使えるMySQLのTrigger機能!
  • データベースのモダンな使い方を知りたい人のための「Webエンジニアのためのデータベース技術[実践]入門」 - stanaka's blog

    「Webエンジニアのためのデータベース技術実践入門」を献いただきました。著者の松信さんはMySQLの専門家で、これまでも数々の良書を執筆されています。ここ1,2年でデータベースの設計や運用の考え方は大きく進化したのですが、そのあたりが分かり易く解説されており、期待を裏切らない良でした。 Webエンジニアのための データベース技術[実践]入門 (Software Design plus) 作者: 松信嘉範出版社/メーカー: 技術評論社発売日: 2012/03/09メディア: 単行(ソフトカバー)購入: 20人 クリック: 480回この商品を含むブログを見る 目次は松信さんのブログエントリにありますが、データベース技術の背景にある考え方から、具体的な概念、MySQLでの実践的な運用、データベースに適したハードウェアの特性まで記述されており、Webアプリケーションエンジニアはこの一冊を読ん

    データベースのモダンな使い方を知りたい人のための「Webエンジニアのためのデータベース技術[実践]入門」 - stanaka's blog
  • MySQLのINSERT/UPDATE時におこる不整合対策 - LukeSilvia’s diary

    先日、作っているアプリケーションにバグが発生しました。バグの内容は次のようなものでした。 同時に存在してはいけないはずのデータが、DB に存在する 整合性のチェックはアプリケーションレベルで行っている 一意制約のような単純なものではないので、アプリケーションレベルで実装 整合性のチェックロジックは正しい これに対し、バグは次のような状況で発生したと仮説を立てました。 ユーザがレコードを一括登録しようとする 登録ボタンを押したがレスポンスが遅い この間、整合性チェックが走っている ユーザはもう一度登録ボタンを押した 2回目の登録の整合性チェックが走り始める 1回目の登録の整合性チェックが完了、INSERTが始まる 2回目の登録の整合性チェックが完了、INSERTが始まる 2回目の登録の整合性チェックの間、DBにはまだ1回目の登録によるINSERTが実行されていないので、チェックを通過した 結

    MySQLのINSERT/UPDATE時におこる不整合対策 - LukeSilvia’s diary
  • skip-name-resolveでMySQLへの接続がどの程度速くなるのか試してみた - Lism.in * blog - nekoya (id:studio-m)

    skip-name-resolve重要 - kotori::log を見て、実際のところどの程度性能に影響があるのか気になったのでベンチを取ってみた。 ベンチマークスクリプトはhttp://gist.github.com/594839で、connect -> disconnectを1000回繰り返すのにかかった時間を計測。 ■計測結果 環境の詳細は後述するとして、まずは結果から。手動で何回か実行して、結果のボリュームゾーンを感覚的に抽出。 環境 実行時間(秒) skip-name-resolve 1.73 〜 1.74 hosts 1.75 〜 1.76 DNS 2.26 〜 2.29 /etc/my.cnfでskip-name-resolveを有効にした場合、確かに速くて、DNSで名前解決するよりも0.5秒ぐらい速くなる。1回あたり0.5msecをどう見るかはケースバイケースだが、DB

    skip-name-resolveでMySQLへの接続がどの程度速くなるのか試してみた - Lism.in * blog - nekoya (id:studio-m)
  • MySQL :: MySQL 8.0 リファレンスマニュアル :: 15.11.4 テーブルのデフラグ

    セカンダリインデックスへのランダムな挿入やセカンダリインデックスからのランダムな削除によって、インデックスが断片化される場合があります。 断片化とは、ディスク上のインデックスページの物理的な順序がページ上のレコードのインデックス順序とかけ離れているか、またはインデックスに割り当てられた 64 ページのブロック内に未使用のページが多数存在することを示します。 断片化の 1 つの現象として、あるテーブルが占めている領域が、来占めている「はずの」領域より大きいことがあります。 それが正確にどの程度かを判定するのは困難です。 すべての InnoDB データおよびインデックスは B-trees に格納され、その fill factor は 50% から 100% まで異なる場合があります。 断片化の別の現象として、次のようなテーブルスキャンにかかる時間が、来かかる「はずの」時間より長いことがあり

  • cl.pocari.org - 拡張され続ける InnoDB のデータファイルのサイズを小さくする方法

    拡張され続ける InnoDB のデータファイルのサイズを小さくする方法 2006-07-07-2: [MySQL] MySQL でトランザクションを可能にするストレージエンジンとして InnoDB があります. InnoDB のデータファイルは,MyISAM テーブルと異なって,デフォルトでは ibdata1 というファイルにデータが蓄積されていくとこになります. MySQL の datadir に自動拡張する 10 MB の ibdata1 ファイルが 1 つと、5 MB の ib_logfile ログファイルが 2 つ作成されます - 7.5.3. InnoDB 起動オプション http://dev.mysql.com/doc/refman/4.1/ja/innodb-start.html この ibdata1 は,大量のデータを追加していくと,自動的にサイズを拡張していきます. ただ

  • InnoDBのファイルサイズ管理

    最近、InnoDBのデータ領域(テーブルスペース)が成長してしまって元に戻すことが出来ない場合の対処についてよく質問されるので、今日はテーブルスペースが成長することへの対策について説明しよう。(ここのところMySQLネタが続いているが、Planet MySQL語版を意識しているわけではないのであしからず!!<<ホントかよ?!>俺) InnoDBのテーブルスペースが成長してしまうのは、ズバリ自動拡張しているからである。テーブルスペースに対して何もオプションを指定しないと、デフォルトでは次のような設定と同じテーブルスペースが作成される。 [mysqld] innodb_data_file_path=ibdata1:10M:autoextend サイズは10MBしかないが、自動拡張するのである。自動拡張してしまうと何が問題なのかというと、データが増えた場合にファイルシステムの空き領域を使い切

    InnoDBのファイルサイズ管理
  • MySQLパーティショニングでパフォーマンスアップ! | QK

    mysqlには、レンジパーティションってものがありまして、うーなんでしょ?ある規則にしがったデータをおのおののデータファイルに振り分けてくれる機能です。 ・データ領域が分割されるため、大量のデータを処理することによる性能上のボトルネックの発生を抑えられる ・MyISAMなど、テーブルサイズに上限がある場合でもそれ以上のデータを格納することが可能になる といった点です、少ないデータですとこれといった利点はないかと思いますが、数百万規模データですと、このデータ分割が、大きな効果を呼ぶ。。かもしれないですし、そうでないかもしれません(汗 ただ、はっきりといえるのが、ある規則に従ったデータを、SELECTする際にそのSELECTで必要の無いデータまで、mysqlがシークする必要がないっていったところでしょうか?ただし、データをまたぐ検索が発生する場合は、パフォーマンスは非パーティションテーブルと比

  • パーティショニングの使用例 - http session情報

    今日もパーティショニングの話の続きである。 パーティショニングが非常にフィットする(たぶん昨日の例よりも)もう一つのケースは、数日間だけ必要なデータを蓄えておくような場合だ。例えば、HTTPセッションやログ情報などが良い例ではないだろうか。そういう場合には、日付を使ってRANGEパーティショニングをするのである。RANGEパーティショニングでももちろんPruningによって性能の向上は出来るのだが、それよりも何よりも高速に不要なパーティションを破棄できるというのが大きい。パーティションの破棄は、内部的にはテーブルのDROPとほぼ同じ扱いなのである。DROPのスピードはストレージエンジンによるが、InnoDBやMyISAM、NDBMySQL Cluster)ならばいくらデータを含んでいても関係なくDROPは一瞬である。テーブルから大量の行を削除すると、フラグメンテーションが発生したり、イン

    パーティショニングの使用例 - http session情報
  • How to Change innodb_log_file_size

    All of Percona’s open-source software products, in one place, to download as much or as little as you need.

    How to Change innodb_log_file_size
  • MySQLをmaster:slave=1:1構成にして参照をslaveに向けるのがなぜ良くないか - 酒日記 はてな支店

    MySQLのmasterとslave 1:1にして参照をslave向けるのってやりたがる人多いみたいだけど、性能たいして上がらない割に可用性落ちるだけだからやめようキャンペーン 2011-06-19 00:16:30 via YoruFukurou MySQL はレプリケーションが簡単に構成できるのですが、時折 master 1台 に対して slave 1台、更新処理は master に、参照は slave に、という構成を目にします。 個人的にはこの構成はお勧めでないと思っているので、その理由を考察してみます。 1. 可用性が落ちる 当然ですが、master, slave のどちらが落ちても影響を受けるために可用性が低下します。 2. 全体の性能がほとんど上がらない master 1台ですべてのクエリを処理する場合と比べて、可用性が落ちる引き換えとして見合った性能向上が得られるか、という

    mattarin
    mattarin 2011/06/20
    負荷が高い一部機能だけ参照をslaveに振り分けるというのも意味ないだろうか?
  • http://www.mysqlpracticewiki.com/index.php/Extra_field

  • 大きめのテーブルにカラムやインデックスを追加する際の注意 - LukeSilvia’s diary

    先日大きめ(といっても500万行くらい)のテーブルにインデックス付きのカラムを追加しようとして痛い目にあったので調査。 大きめのテーブルにカラムやインデックスを追加するとどうなるか 今回は単純に、「ALTER TABLE 〜 」で追加しようとしました。追加するカラムは3つで、 varchar(255) インデックスなし varchar(255) ↓のdate 型カラムとマルチカラムインデックスの形式のユニークインデックスあり date インデックスあり SQL を実行し、状況を「SHOW PROCESSLIST」で監視していたら、1つ目のカラム追加で次のような状態に… 最初にState が「copy to tmp table」状態になり、次の状態に遷移するまで1時間かかる 次にState が「Repair with keycache」状態になり、完了までに1時間かかる 次のカラム追加に対す

    大きめのテーブルにカラムやインデックスを追加する際の注意 - LukeSilvia’s diary
    mattarin
    mattarin 2011/05/25
    これを先に読んでおけばよかった。。
  • MySQLのEXPLAINを徹底解説!!

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

    MySQLのEXPLAINを徹底解説!!
  • なぜMySQLのサブクエリは遅いのか。

    よくMySQLはサブクエリが弱いと言われるが、これは当だろうか?半分は当で半分は嘘である。MySQLのサブクエリだってなんでもかんでも遅いわけではない。落とし穴をしっかり避け、使いどころを間違えなければサブクエリも高速に実行できるのである。今日はMySQLがどんな風にサブクエリを実行し、どのような場合に遅いのかということについて説明しよう。 EXPLAINで実行計画を調べた際に、select_typeにはクエリの種類が表示されるのだが、代表的なサブクエリには次の3つのパターンがある。 SUBQUERY DEPENDENT SUBQUERY DERIVED 結論から言おう。遅いのは2番目、DEPENDENT SUBQUERYである。DEPENDENT SUBQUERYとはいわゆる相関サブクエリに相当するもので、サブクエリにおいて外部クエリのカラムを参照しているサブクエリのことである。そし

    なぜMySQLのサブクエリは遅いのか。
  • 「優れたMySQL DBAを見分ける27+3の質問」に対する回答例

    随分と更新が空いてしまったが、「優れたMySQL DBAを見分ける27+3の質問」に対する回答例(漢バージョン)を紹介しよう。実は質問を掲載した際「難しい!」というコメントが非常に多く、もう少し易しい質問にするべきだったかと思って次のように呟いてみたのだが・・・ 非常に心強くて安心した。さすがに日を代表するMySQLのエキスパートである。出題のレベルは間違ってはいなかった!! そんなわけで、回答の方に移ろう。 MySQLのサーバープロセスはいくつある?ひとつ。mysqldはシングルプロセス・マルチスレッドモデルを採用しているので、"サーバー"プロセスはひとつである。多くの場合、Linuxなどでmysqldを動かす場合には、お供にmysqld_safeも常に動いていることが多いが、mysqld_safeはサーバーではなく、mysqldのためのラッパーであるので数には含めない。 rootユー

    「優れたMySQL DBAを見分ける27+3の質問」に対する回答例
  • MySQL の pager が便利だった - xykの日記

    mysql のコンソールで grep とか使えないかなぁと思っていたら pager を使えば出来ることを今更知った。 MySQL :: MySQL 5.1 リファレンスマニュアル :: 7.7.2 mysql Commands http://dev.mysql.com/doc/refman/5.1/ja/mysql-commands.html mysql のプロンプトで以下のように pager (または\P) を指定すればよい。 ・grep mysql> pager cat | grep hoge PAGER set to 'cat | grep hoge'・ファイルに保存 mysql> \P cat > ~/dump.txt PAGER set to 'cat > ~/dump.txt'・less mysql> \P less PAGER set to 'less'less の -S オ

    MySQL の pager が便利だった - xykの日記
  • mysqlコマンドをより便利に安全にするための小粒なTIPS集|サイバーエージェント 公式エンジニアブログ

    初めまして。2010年の3月に入社した oinume です。新年1月からウィルス性胃腸炎に罹りながらもなんとかこのエントリーを書いています。今回は、mysqlコマンドに関する自分が今まで学んだ&教えてもらった細かい実践的なTIPSを紹介します。小粒ですが何かの役に立てば幸いです。 edit (¥e)コマンド mysqlプロンプトにいながら任意のエディタでSQLが編集できちゃいます。具体的には、mysqlコマンドでプロンプト待ちの状態で mysql> edit のように edit または ¥e と入力すると、環境変数EDITORで設定してあるエディタが立ち上がりSQLが編集可能になります。編集が終わったらエディタを終了して ; とやればSQLが実行されます。viなどターミナルで動くエディタに慣れている人は長いSQLを編集する時に重宝する機能でしょう。この技は前職の同僚に教えてもらって、以降便

    mysqlコマンドをより便利に安全にするための小粒なTIPS集|サイバーエージェント 公式エンジニアブログ
  • wait_timeout | 戯れ言の水溜まり∅

    MySQLのシステム変数のwait_timeoutを、mysqlコマンドで接続して確認すると、my.cnfで変更していても、 show variables では変更されていないように見える。 しかし、 show global variables で確認すれば変更されているのがわかる。 システム変数には、グローバル変数とセッション変数の2種類があるのだ。 http://ftp.cc.uoc.gr/mirrors/mysql/doc/refman/5.1/ja/using-system-variab... そして、セッション変数のwait_timeoutは、グローバルのwait_timeout値か、interactive_timeout値かのどちらかになるが、それはクライアントのタイプによるとのこと。 http://ftp.cc.uoc.gr/mirrors/mysql/doc/

  • NoSQLとしてMySQLを使うDeNAが、memcachedよりも高速な75万クエリ/秒を実現

    モバゲーで知られるDeNAは、バックエンドデータベースにNoSQLを使っていません。なぜか? それはMySQL/InnoDB 5.1の環境で秒間75万クエリという、多くのNoSQLでも実現できないような高性能を実現しているから。DeNAの松信嘉範(まつのぶよしのり)氏は、自身のブログにこんな内容のエントリ「Using MySQL as a NoSQL - A story for exceeding 750,000 qps on a commodity server」(英語)をボストしています。 Yoshinori Matsunobu's blog: Using MySQL as a NoSQL - A story for exceeding 750,000 qps on a commodity server 松信氏が指摘するように、大規模なネットサービスを提供している企業の多くは分散環境で

    NoSQLとしてMySQLを使うDeNAが、memcachedよりも高速な75万クエリ/秒を実現