JPOUG Advent Calendar 2013の23日目です。比較的簡単なDMLでもRDBMS間の非互換性が出てしまうという怖い話をします。 +----+------+ | id | data | +----+------+ | 1 | a | | 2 | b | | 3 | c | +----+------+ BEGIN; -- IDが最も小さいレコードをロックする SELECT id, data FROM q WHERE id = (SELECT MIN(id) FROM q) FOR UPDATE; (何らかの処理) -- 処理が終わったので削除する DELETE FROM q WHERE id = (1つ目のSQLで取得したID); COMMIT; IDが最も小さいレコードをロックし、何らかの処理を行って、最後にそのレコードを削除します。IDが最も小さいレコードを取得するというのはよく見かけるもので、例えばジョブキューを素朴に実装するとこのような流れになるかと思います。なおジョブキューを本当にこのように実装してしまうとトラブルの元になりますので、気になる方はBaron …
[さらに読む]The latest from the MySQL community
Ideas, releases, practical guides, and perspectives from the people building with MySQL.
MySQL Casual Advent Calendar 2013 の 21 日目です。 早いもので、MySQL 5.6 が GA としてリリースされて、早いもので約十ヶ月くらい経っていますし、AWS RDS でも 5.6 がサポートされていますし、本番環境の MySQL サーバで 5.6 が稼働しているところが多いのではないでしょうか? さて、とあるプロジェクトで CentOS 6.4 x86_64 上 Redmine を構築したとき、MySQL 5.6 をクライアントして使ったときにはまりました。 まず、dev.mysql.com から、公式の 5.6.15 の RPM を MySQL-devel パッケージをインストールして、redmine を展開して、bundle しました。 $ wget http://www.redmine.org/releases/redmine-2.4.1.tar.gz; tar zxf redmine-2.4.1.tar.gz $ cd redmine-2.4.1 redmine-2.4.1$ bundle install --path vendor/bundle Fetching gem metadata from https://rubygems.org/........ ... Installing mysql2 (0.3.14) …
[さらに読む]
むるーん、ガッ(挨拶
このエントリーは 全文検索エンジンGroonga Advent Calendar 2013 の20日目です。
みなさん、最近、ロック刺さりましたか?
クラッシュ以外でそうそう刺さることはないと思うんですが、いざ刺さるとどうなるのか…というのは予め考えておいた方が良いと思います(こんなエントリーを書いている時点でお察しください)
復旧作業については @yoshi_kenさん の Y-Ken Studio: groonga/mroongaの.mrnファイルがlock
failedとなった場合の復旧方法 が詳しいですのでそちらで。
…
本日は、MySQL Casual Advent Calendar 2013の20日目である。というわけでカジュアルに小ネタを紹介しよう。
MVCC - Multi Version Concurrency Controlご存知の通り、InnoDBはMVCCを実装している。そのため、分離レベルがREPEATABLE READの場合には、行にロックをかけることなく、一貫した読み取りが可能になっている。
もし、あるトランザクションT1開始後に、別のトランザクションT2によって同じ行が書き換えられてしまった場合には、T1はロールバックセグメントにある古いバージョンの値を読み取ることができるので、T1内で実行したSELECTは常にT1開始時点のデータを参照することができるのである。大事なのでもう一度言うが、REPEATABLE READにおける単純なSELECTでは行ロックは必要ない。
このエントリーは 全文検索エンジンGroonga Advent Calendar 2013
の17日目です。
2013/05/29リリースの Mroonga 3.04 の新機能として、TritonnにあったWプラグマのバックポート(?)があります。重み付け検索というより、マルチセクションインデックスの一部を使って検索するために使うことが多いような気もします。
mysql> SHOW CREATE TABLE t1\G[さらに読む]
*************************** 1. row ***************************
Table: t1
Create Table: CREATE TABLE `t1` (
`num` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`val1` varchar(20) DEFAULT NULL,
`val2` varchar(20) DEFAULT NULL,
…
1. ストレージエンジン
ストレージエンジンと、永続性、ロック機構、トランザクション処理の振る舞いや分離レベルといったストレージエンジンの基礎となる動きについての理解なしに、MySQL自体やモデルデータのコードをいじるべきでない。それに加えて、InnoDBのクラスタ化されたプライマリキーや、MyISAMの全文検索インデックスのようなコア要素も、極めて重要な情報だ。
2. インデックスのコンセプト
特に以下のような点について。
- カバリングインデックス
- 連結インデックス
- インデックスを使ったソートの最適化
- varchar型やレンジの広いスキャン(日付型やint型)に対するインデックスのパフォーマンス影響 …
この記事は MySQL Casual Advent Calendar 2013 の15日目の記事です。
今、空前の SQL エスケープブームみたいなので、このビッグウェーブに乗っかってみます。
でも面倒なのでセキュリティについての話はしません。カジュアル!
文字列リテラルとエスケープ
MySQL では SQL 中の文字列リテラルは次のように表現します。
'abc' -- シングルクォートで括る
"abc" -- ダブルクォートで括る
0x616263 -- 16進数
x'616263' -- 16進数
0b011000010110001001100011 -- 2進数
b'011000010110001001100011' -- 2進数
各表記で charset を指定することができます
_utf8 'abc'
_utf8 "abc"
_utf8 0x616263
_utf8 x'616263'
_utf8 0b011000010110001001100011
_utf8 b'011000010110001001100011'
…[さらに読む]
Percona XtraDB Clusterでクラスターの初期化中に、
wsrep_sst_method= xtrabackup
wsrep_sst_auth= username:passwordとしてても、JOINER側で
131212 17:22:05 [Note] WSREP: State transfer required:[さらに読む]
Group state: 64863b36-62f7-11e3-bef2-a746941be182:1
Local state: 00000000-0000-0000-0000-000000000000:-1
131212 17:22:05 [Note] WSREP: New cluster view: global state: 64863b36-62f7-11e3-bef2-a746941be182:1, view# 10: Primary, numbe
r of nodes: 2, my index: 1, protocol version 2
131212 17:22:05 [Warning] WSREP: Gap in state sequence. Need state transfer.
131212 17:22:07 [Note] WSREP: Running: 'wsrep_sst_xtrabackup --role 'joiner' --address '192.168.xxx.xxx' --auth '' --datadir '/xxx' --defaults-file '/xxx/my.cnf' --parent '3382''
WSREP_SST: [INFO] Streaming with tar (20131212 17:22:08.058)
WSREP_SST: [INFO] Using socat as streamer (20131212 17:22:08.063)
WSREP_SST: …
MySQL Casual Advent Calendar 2013の14日目です。 2013年12月11日にRed Hat Enterprise Linux 7 Betaがリリースされました。以前から噂されていたとおり、RHEL 7ではMySQLではなくMariaDBが採用されています。本日は、RHEL 7 BetaにおいてMariaDBがどのような構成になっているのかを簡単に確認していきたいと思います。 パッケージ構成 MariaDB関連パッケージは13個用意されています。 mariadb-bench.x86_64 : MariaDB benchmark scripts and data mariadb-devel.i686 : Files for development of MariaDB/MySQL applications mariadb-devel.x86_64 : Files for development of MariaDB/MySQL applications mariadb-embedded-devel.i686 : Development files for MariaDB as an embeddable library mariadb-embedded-devel.x86_64 : Development files for MariaDB as an embeddable library mariadb-embedded.i686 : MariaDB as an embeddable library mariadb-embedded.x86_64 : MariaDB as an embeddable library …
[さらに読む]