Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?
今更だけど MySQL 5.6 ではオンラインDDLの機能が追加されている。今日はこのオンラインDDLについて勉強したことを書いてみる。 MySQL のマニュアル MySQL :: MySQL 5.6 Reference Manual :: 14.11 InnoDB and Online DDL にいろいろ書いてある。いまから書くことはこのマニュアルから得た知識が元になっている。 DDL てなによ? データではなく、テーブル自身を操作するためのSQL文のこと。CREATE, ALTER, DROP, TRUNCATEなど。オンラインDDLではCREATE INDEX, DROP INDEX, ALTER TABLEに適用される。 http://dev.mysql.com/doc/refman/5.6/en/glossary.html#glos_ddl 5.1 までの ALTER TABLE
問題 こんなテーブル a があります。 create table a (id int, flag int); こんなふうにデータを入れて、 insert into a (id, flag) values (1, 1), (2, 1), (3, 0), (4, 0), (5, 1); こんなふうになっているとします。 select * from a; +----+------+ | id | flag | +----+------+ | 1 | 1 | | 2 | 1 | | 3 | 0 | | 4 | 0 | | 5 | 1 | +----+------+ なるべく単純な1つのSQLで、すべてのレコード数と、flag=1のレコード数と、flag=0のレコード数を取得せよ。 なお、サブクエリは使わないこと。 ヒント 集計を3つしたいので、こうなる? select count(????), c
Ruby on Rails 8.0.1 Module ActiveRecord::Transactions::ClassMethods activerecord/lib/active_record/transactions.rb Active Record Transactions Transactions are protective blocks where SQL statements are only permanent if they can all succeed as one atomic action. The classic example is a transfer between two accounts where you can only have a deposit if the withdrawal succeeded and vice versa. Tran
データのクエリーを実行してから、同じトランザクション内で関連データを挿入または更新する場合は、通常の SELECT ステートメントで十分な保護が提供されません。 ほかのトランザクションは、クエリーが実行されたばかりの同じ行を更新または削除できます。 InnoDB では、追加の安全性が提供される 2 つのタイプのロック読み取りがサポートされています。 SELECT ... FOR SHARE 読み取られる行に共有モードロックを設定します。 ほかのセッションもその行を読み取ることができますが、トランザクションがコミットするまで変更することはできません。 これらの行のいずれかがコミットされていない別のトランザクションによって変更された場合、クエリーはそのトランザクションが終了するまで待機してから、最新の値を使用します。 SELECT ... FOR SHARE は SELECT ... LOCK
Percona Database Performance Blogの翻訳。既に運用を始めたデータベースで、インデックスが正しく使われているか、無駄や不足がないかを確認する方法のまとめ記事。クエリをひとつひとつ確認するのではなく、統計情報を元に判断する分かりやすい方法。 このブログ記事では、MySQLインデックスに手入れする基本的なステップについて見ていこうと思います。 データベースは、インデックス次第でハイパフォーマンスにも、役立たずで遅くて大変にもなりうることはご存知でしょう。インデックスは、時々手入れをする価値がある非常に重要なものです。それでは、何をチェックすればよいのでしょうか?順不同ですが、確認すべき点を挙げてみます。 1. 使われていないインデックス sysスキーマで、使われていないインデックスをとても簡単に見つけられます。 schema_unused_indexes ビューを
押忍! dice(@dice_dDtea)です。 varchar型を使うとき、 指定する数字はいくつがいいのだろうか? 調べてると「255」と「256」をよく目にする。 varchar(255) と varchar(256) でどっちを使うほうが良いか論争もあるくらいだ。 『MySQLのVARCHARサイズについて – Togetterまとめ』 http://togetter.com/li/54358 UTF-8で255か256かのところにオーバーフローページ利用有無の境目があります。 http://bit.ly/94z5BV RT @sugyan: 255でも256でもパフォーマンス的に大きな違いはないと思うのだけど なんか「こういう理由でこっちを選ぶんだよ!」みたいのが欲し — SH2 (@sh2nd) 2010, 9月 27 今回この結論を出して見たいと思う。 「255」と「256」
⚓ utf8の4バイト文字問題は突然に こんにちは、hachi8833です。 MySQLのデータベースでencoding=utf8が指定されていると、UTF-8の文字長が4バイトの文字をデータベースに保存できなくなる、いわゆるUTF-8の4バイト文字問題、またの名を「寿司ビール問題」が発生することがあります(「MySQLのutf8の4バイト文字問題とは」で後述)。 BPSWebチーム部長のmorimorihoge さんがこの問題に対応したときの手順をメモします。 ⚓ utf8からutf8mb4に移行する手順 MySQLのストレージエンジンはInnoDBが前提です。utf8mb4を指定するにはMySQLのバージョンが5.5以上である必要があります。 ⚓ 1. 以下のコマンドでdumpを取る mysqldump --no-create-info --ignore-table=mydata_st
仕事でMySQLのパフォーマンスチューニングをしていて、インデックスについて分かっていないことが多かったので調べたことをメモ。基本的なところから学習しなおした。 MySQLのインデックスは、カラムが特定の値をもつレコードの迅速な検索に使用される。インデックスを使用すれば、数百とか数億ものレコードが入っているテーブルから、一組のレコードを迅速に見つけて取り出すことが可能になる。 しかし、インデックスは速度を改善することもあるが、挿入の邪魔になって遅くなることもある。 インデックスを適切に使うために、まずはインデックスの基本概念をおさえる必要がある。 インデックスの概念 インデックスとは インデックスの仕組みを理解するには、まずMySQLがどのようにクエリに応答するかを知る必要がある。 例えば、 SELECT * FROM phone_book WHERE last_name = 'Hoge'
MySQLにて、SQLをexplainした時に表示される項目の大事なポイントをメモ。 ちなみに、本ページに表示されているサンプルSQL用テーブル作成DDLはこちら。 (必須ではないので閉じておく) CREATE TABLE `test` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `row1` int(11) NOT NULL, `row2` int(11) NOT NULL, `row3` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `inx_row1_row2` (`row1`,`row2`), KEY `idx_row3` (`row3`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; INSERT INTO `test` (`
起きたこと ローカルマシンから mysql につなごうとしたら以下の様なエラーが発生し繋げなくなった。 $ mysql -uroot ERROR 2013 (HY000): Lost connection to MySQL server at 'sending authentication information', system error: 32 原因 1 process あたりの許容ファイルオープン数を超えてしまったことが原因の様子。 MySQL 5.6 の innodb_file_per_table オプションはデフォルトで ON になっている。 ON にすると各テーブルのデータはそれぞれのファイルに保存されるようになる。 OSX の場合、1 process あたりの許容ファイルオープン数はデフォルトで 256 となっている。 この数字は通常問題にならないが、 parallel に
MySQLをチューニングやってますか??やったほうがいいですよ。 MySQLTunerのダウンロード方法と使用方法を紹介します。 作業環境 - さくらのVPS/2G - CentOS 6.6 - MySQL 5.1 MySQLTunerをダウンロードする MySQLTunerをダウンロードします。 # wget -O /usr/local/src/MySQLTuner.zip https://github.com/rackerhacker/MySQLTuner-perl/archive/master.zip ダウンロードしたMySQLTunerのZIPファイルを解凍します。 # unzip /usr/local/src/MySQLTuner.zip -d /usr/local/src/ # rm /usr/local/src/MySQLTuner.zip MySQLTunerは、ダウンロー
ちょっとしたJenkinsの設定ミスで、似たような名前のデータベースを大量に作ってしまった @kadoppe です。こんばんは。この記事では、そんな似たような名前のデータベースを一括削除する方法を紹介します。 「似たような名前のデータベース」というのは、こんなやつです。 hoge_2013101501 hoge_2013101502 hoge_2013101503 hoge_2013101504 … 全部必要のないデータベースなので削除したいのですが、一つ一つ削除するのは手間。 データベースを削除するSQL文として「DROP TABLE」文がありますが、複数のデータベースをワイルドカードで指定するようなことはできません。 諦めずにいろいろ調べていると、Stack Overflowで以下のような投稿を発見しました。 sql – Drop MySQL databases matching so
※このエントリはMySQL Casual Advent Calendar 2015の5日目のエントリです。 openark-kit というものについて ここまで読んでわかった方は、この先を読む必要はありません。 openark-kitとは、mysqlの運用に便利なツールキットを14個あつめたソフトウェアパッケージです。 Shlomi Noachという方がPythonで開発しており、少なくとも2009年に発表されているようです。 2015-12-05時点での最新版は196.1となっており、.tar.gz および .deb で配布されております。 このエントリを書いた背景事情 そもそも僕自身、50を超えるクラスタ化されたmysqlノードと一緒に業務生活を送っております。 ところが、システムが非常に古くさい構成のため、合計レコード数が2億から3億程度ある垂直分割されたテーブルに対しALTERを投
データベースの運用で避けられないのが、ロック競合によって起こるシステムトラブルへの対応です。「2時までに終わるはずのバッチ処理が朝になっても終わっていない」とか「負荷が高いわけでもないのにシステムが無応答になっている」といったトラブルが発生したとき、DBエンジニアはそれがロック競合によるものなのかどうかを切り分けて、適切に対処しなければなりません。 これまでInnoDBはロック競合に対してほとんど打つ手がなかったのですが、最近ようやく対処方法がでてきました。今日はその手順を確認していきたいと思います。 前提 今回ご紹介する手順は、MySQLの以下のバージョンを対象にしています。 MySQL 5.1+InnoDB Plugin 1.0 MySQL 5.4 いきなりハードルを上げてしまって申し訳ありませんが、バージョン5.0以下や素の5.1では使えませんのでご注意ください。以降の実行例はすべて
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く
{{#tags}}- {{label}}
{{/tags}}