Community journal

The latest from the MySQL community

Ideas, releases, practical guides, and perspectives from the people building with MySQL.

Follow the feed
Showing entries 1711 to 1720 of 3187 « Previous | Next »
Oracle/MySQL/PostgreSQLにおけるサブクエリを含むDMLの非互換性

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 …

[さらに読む]
MySQL 5.6 をクライアントとして使うときに注意するポイント

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) …

[さらに読む]
Mroongaのロックが突き刺さるとどうなるか

むるーん、ガッ(挨拶
このエントリーは 全文検索エンジンGroonga Advent Calendar 2013 の20日目です。

みなさん、最近、ロック刺さりましたか?
クラッシュ以外でそうそう刺さることはないと思うんですが、いざ刺さるとどうなるのか…というのは予め考えておいた方が良いと思います(こんなエントリーを書いている時点でお察しください)

復旧作業については @yoshi_kenさん の Y-Ken Studio: groonga/mroongaの.mrnファイルがlock failedとなった場合の復旧方法 が詳しいですのでそちらで。

…

[さらに読む]
InnoDBのREPEATABLE READにおけるLocking Readについての注意点

本日は、MySQL Casual Advent Calendar 2013の20日目である。というわけでカジュアルに小ネタを紹介しよう。

MVCC - Multi Version Concurrency Controlご存知の通り、InnoDBはMVCCを実装している。そのため、分離レベルがREPEATABLE READの場合には、行にロックをかけることなく、一貫した読み取りが可能になっている。

もし、あるトランザクションT1開始後に、別のトランザクションT2によって同じ行が書き換えられてしまった場合には、T1はロールバックセグメントにある古いバージョンの値を読み取ることができるので、T1内で実行したSELECTは常にT1開始時点のデータを参照することができるのである。大事なのでもう一度言うが、REPEATABLE READにおける単純なSELECTでは行ロックは必要ない。

Fluentdのタグ書き換えが捗る「tag_parts」プレースホルダを使ってみよう

Fluentdでログのちょっとした加工をする際に、タグの付け替えが必要です。
新しいタグを指定するか、先頭文字列の付け替えを行う手法が良く使われます。
しかしそれだけではかゆいところに手が届かず、もどかしい思いをされたことでしょう。
そんな時、タグをドットで分解した要素毎に分解して使えるプレースホルダが大活躍します。

この記事を読めば、これがなぜ今まで無かったのか不思議に感じる程です。
そう思えるほど便利な新機能、それでは早速紹介します。

プレースホルダとは

…

[さらに読む]
もしMroongaのWプラグマがなかったら

このエントリーは 全文検索エンジン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,
…
[さらに読む]
MySQLを使ったアプリケーションを作るエンジニアが知るべきMySQLの内部構造とは?

1. ストレージエンジン

ストレージエンジンと、永続性、ロック機構、トランザクション処理の振る舞いや分離レベルといったストレージエンジンの基礎となる動きについての理解なしに、MySQL自体やモデルデータのコードをいじるべきでない。それに加えて、InnoDBのクラスタ化されたプライマリキーや、MyISAMの全文検索インデックスのようなコア要素も、極めて重要な情報だ。

2. インデックスのコンセプト

特に以下のような点について。

  • カバリングインデックス
  • 連結インデックス
  • インデックスを使ったソートの最適化
  • varchar型やレンジの広いスキャン(日付型やint型)に対するインデックスのパフォーマンス影響
  • …
[さらに読む]
MySQL の SQL エスケープ

この記事は 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'
…[さらに読む]
wsrep_sst_authでハマったメモ

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: …
[さらに読む]
Red Hat Enterprise Linux 7 BetaにおけるMariaDB 5.5の構成

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 …

[さらに読む]