October 2008 Archives

MySQL Clusterメモ

ndb_force_send=1で強制的に要求

0でちょっと(10mm sec.)待つ:ネットワークアクセスのオーバーヘッドは増えるが、スループットは増えるかも?

チューニングには、レスポンスタイム重視、またはスループット重視、の二通りがある。

MySQL Cluster 6.3では、PK検索時に性能良くなる。
ただしData Nodeが4つ以上でないと、あまり効果無いかも。

MySQL ClusterのInjector Threadはリアルタイム処理のみ。バッファなどの機能は無い。

MySQL Clusterのインデックス

1. UNIQUE KEY

HASHとBTREEのインデックスが作成される

2. KEY

3. UNIQUE KEY USING HASH

HASHインデックスのみが作成される

HASHインデックスは、「一致検索」のみで利用される。
部分一致などは不可。

config.ini.1024

my.cnf.1024

1. テーブル作成

drop database if exists error_test;
create database error_test;

create logfile group lg_hiro add undofile 'undo_hiro.dat' engine ndb;

create tablespace ts_hiro add datafile 'data_hiro.dat' use logfile group lg_hiro engine ndb;

use error_test;

DROP TABLE IF EXISTS `error_test`.`t1`;
CREATE TABLE `error_test`.`t1` (
`c1` bigint NOT NULL auto_increment,
`c2` char(50) NOT NULL default 'AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEEEEEE',
`c3` char(50) NOT NULL default 'AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEEEEEE',
`c4` char(50) NOT NULL default 'AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEEEEEE',
`c5` char(50) NOT NULL default 'AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEEEEEE',
PRIMARY KEY (`c1`)
) /*!50100 TABLESPACE ts_hiro STORAGE DISK */ ENGINE=ndbcluster DEFAULT CHARSET=utf8;

ディスクテーブル関連のファイルが作成できない場合は、ゴミが残っている可能性がある。
/export/home/mysql-cluster/ndb_2_fs/配下に残っているゴミを削除する。node-id=3も同様。


2. 後はINSERTとDELETEを繰り返す

insert into t1(c2) values('AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEE');

insert into t1(c2) select c2 from t1;

mysql> delete from t1 limit 100000;

など。

3. アップデートを繰り返しつつ、ちゃんと監視する。

mysql> show create table Table_Space\G
*************************** 1. row ***************************
View: Table_Space
Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `air1016`.`Table_Space` AS select `FILES`.`FILE_NAME` AS `FILE_NAME`,((`FILES`.`TOTAL_EXTENTS` * `FILES`.`EXTENT_SIZE`) / (1024 * 1024)) AS `Total MB`,((`FILES`.`FREE_EXTENTS` * `FILES`.`EXTENT_SIZE`) / (1024 * 1024)) AS `Free MB`,`FILES`.`EXTRA` AS `EXTRA` from `INFORMATION_SCHEMA`.`FILES` where (`FILES`.`ENGINE` = _utf8'NDBCLUSTER')
character_set_client: latin1
collation_connection: latin1_swedish_ci
1 row in set (0.00 sec)

mysql> select * from Table_Space;
+---------------+----------+---------+-----------------------------------------+
| FILE_NAME | Total MB | Free MB | EXTRA |
+---------------+----------+---------+-----------------------------------------+
| data_hiro.dat | 128.0000 | 47.0000 | CLUSTER_NODE=2 |
| data_hiro.dat | 128.0000 | 47.0000 | CLUSTER_NODE=3 |
| undo_hiro.dat | 128.0000 | NULL | CLUSTER_NODE=2;UNDO_BUFFER_SIZE=8388608 |
| undo_hiro.dat | 128.0000 | NULL | CLUSTER_NODE=3;UNDO_BUFFER_SIZE=8388608 |
| NULL | NULL | 65.1864 | UNDO_BUFFER_SIZE=8388608 |
+---------------+----------+---------+-----------------------------------------+
5 rows in set (0.19 sec)

4. そのうち、片方のData Nodeが落ちることが分かる。

5. エラーログは、こんな感じ。

[root@Solaris1 mysql-cluster]# less ndb_2_error.log
Current byte-offset of file-pointer is: 1566


Time: Thursday 16 October 2008 - 16:39:11
Status: Temporary error, restart node
Message: System error, node killed during node restart by other node (Internal e
rror, programming error or missing error message, please report a bug)
Error: 2303
Error data: Node 2 killed this node because GCP stop was detected
Error object: NDBCNTR (Line: 235) 0x0000000e
Program: ndbd
Pid: 16496
Trace: /export/home/mysql-cluster//ndb_2_trace.log.1
Version: mysql-5.1.23 ndb-6.2.15
***EOM***

Time: Friday 24 October 2008 - 11:03:07
Status: Temporary error, restart node
Message: System error, node killed during node restart by other node (Internal e
rror, programming error or missing error message, please report a bug)
Error: 2303
Error data: Node 2 killed this node because GCP stop was detected
Error object: NDBCNTR (Line: 235) 0x0000000e
Program: ndbd
Pid: 20745
Trace: /export/home/mysql-cluster//ndb_2_trace.log.2
Version: mysql-5.1.23 ndb-6.2.15
***EOM***

Time: Friday 24 October 2008 - 11:23:44
Status: Temporary error, restart node
Message: System error, node killed during node restart by other node (Internal e
rror, programming error or missing error message, please report a bug)
Error: 2303
Error data: Node 2 killed this node because GCP stop was detected
Error object: NDBCNTR (Line: 235) 0x0000000e
Program: ndbd
Pid: 21275
Trace: /export/home/mysql-cluster//ndb_2_trace.log.3
Version: mysql-5.1.23 ndb-6.2.15
***EOM***

(END)

6. 繰り返し

MySQL Clusterのシャットダウン

Data Nodeは--initialで起動

data, undoファイルを手動で削除

で、

10GBにすると、起動せず

8GBにすると、同じ個所で同じエラー

9GBでも、同じくエラー

---
24秒かかるクエリは、問題ない。

mysql> insert into t1(c2) select c2 from t1;
Query OK, 65536 rows affected (24.07 sec)
Records: 65536 Duplicates: 0 Warnings: 0

ディスクテーブルを作成する前にやること。

create logfile group lg_1 add undofile 'undo_1.dat' engine ndb;

create tablespace ts_1 add datafile 'data_1.dat' use logfile group lg_1 engine ndb;

で、その逆。不要なファイルを削除するには、次の手順だと思うのだけど、UNDOファイルの削除方法が分からない。

1. データファイルの削除

alter tablespace ts drop datafile '' engine ndb;

2. UNDOファイルの削除

テーブルスペースを削除すると、関連したUNDOファイルも削除されるらしい。

drop table space ts engine ndb;

3. ログファイルグループの削除

drop logfile group lg engine ndb;

メモリカードのエラー

読み取り不能となったメモリカードを、「Resume Checker」というフリーのチェックソフトでチェックしてみた。

これが結果。

PhysicalDrive4 の調査 ドライブ装置内蔵パラメータ MediaType=11 Cylinders=248 TracksPerCylinder=255 SectorsPerTrack=63 BytesPerSector=512 TotalSector=3,984,120 TotalVolume=2,039,869,440 ディスク装置の先頭領域は消去されています。 論理ドライブの先頭は -1 セクタにあるらしいです。 おそらくこの領域は消去状態です。 論理ドライブの先頭は見つかりませんでした。

DPBを読み込めませんでした。
ErroCode=27 要求されたセクタが見つかりません。

DPB(FATs)が異常なのでFATの検査は行えません。
おそらくDPBは消去状態です。

もはや救済不可能だな。

data fileが足りなくなると、"table is full"エラー

undo logが足りなくなると、こんなエラー:

mysql> delete from t1 limit 1000;
ERROR 1297 (HY000): Got temporary error 1501 'Out of undo space' from NDBCLUSTER

InnoDBのテーブルスペースみたいに、自動拡張オプションがあってもいいのに。

MT 4.2.2へアップグレードした

暇つぶしに、掲題。

ファイルは基本上書き

1. MT 4.2(EN/OSS)からMT 4.2.2(JP/Personal)へアップグレード
2. mt vicuna for 4.2へアップグレード

・ウィジェットでは、Categoryの代わりにタグクラウドを
・「前後の記事へのリンク」削除→いらん
・「関連エントリー」は、5つじゃなくて、50表示するように設定→5つだと寂しい
・サイドバーの「月別リスト」削除→いらん
・サイドバーの「最近のエントリー」を5つから20へ変更
・アーカイブテンプレート:エントリーのパスを「"%Y/%m/%d-%H%m%S"」、拡張子「html」に変更

--To Do?---

AdSense:個別ページには貼り付けした?
XREA Analyzer:完了?
Google Analyze


ちなみに、もう一つのほうも、アップグレードしてみた。

1. MT 4.1(JP/Personal)からMT 4.2.2(JP/Personal)へアップグレード

repeating insert/delete rows NDB disk data tables cause ndbd crash with "Forced node shutdown completed. Caused by error 2303"

再現方法

1.ディスクベーステーブルを作成する

create database error_test;

use error_test;

create logfile group lg_hiro add undofile 'undo_hiro.dat' engine ndb;

create tablespace ts_hiro add datafile 'data_hiro.dat' use logfile group lg_hiro engine ndb;

DROP TABLE IF EXISTS `error_test`.`t1`;
CREATE TABLE `error_test`.`t1` (
`c1` bigint NOT NULL auto_increment,
`c2` tinyint(4) NOT NULL default 99,
`c3` char(32) NOT NULL default 'AAAAAAAAAABBBBBBBBBBCCCCCCCCCC',
`c4` char(32) NOT NULL default 'AAAAAAAAAABBBBBBBBBBCCCCCCCCCC',
`c5` char(39) NOT NULL default 'AAAAAAAAAABBBBBBBBBBCCCCCCCCCC',
PRIMARY KEY (`c1`),
KEY `Index_2` (`c2`)
) /*!50100 TABLESPACE ts_hiro STORAGE DISK */ ENGINE=ndbcluster DEFAULT CHARSET=utf8;


2.INSERTとDELETEを繰り返す

insert into t1(c2,c3,c4) select c2, c3, c4 from t1;

delete from t1 limit 10000;

などを繰り返す。

その際、Table_Spaceビューを作成してdata fileおよびundo fileの空き状況をチェックするといいかも。


3.そのうち、Data Nodeがエラーで落ちる。

ndb_2_out.logの中身:
2008-10-16 15:45:47 [MgmSrvr] ALERT -- Node 2: Forced node shutdown completed. Caused by error 2303: 'System error, node killed during node restart by other node(Internal error, programming error or missing error message, please report a bug). Temporary error, restart node'

4.データ挿入中に「out of operation recordsエラー」が発生した場合は、limitなどを追加して続行する

mysql> insert into t1(c2,c3,c4) select c2, c3, c4 from t1;
Query OK, 65536 rows affected (25.55 sec)
Records: 65536 Duplicates: 0 Warnings: 0

mysql> insert into t1(c2,c3,c4) select c2, c3, c4 from t1;
ERROR 1297 (HY000): Got temporary error 233 'Out of operation records in transaction coordinator (increase MaxNoOfConcurrentOperations)' from NDBCLUSTER
mysql> insert into t1(c2,c3,c4) select c2, c3, c4 from t1 limit 10000;

5.4.のエラー発生後は、deleteしてみたり。

6.こんなエラーが出たりもするけど、めげない。

mysql> delete from t1 limit 10000;
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

7.mysqlクライアントに返されたエラー

mysql> delete from t1 limit 100000;
ERROR 1296 (HY000): Got error 157 'Unknown error code' from NDBCLUSTER
mysql>


8.設定ファイル

=====
[root@Solaris1 mysql-cluster]# cat config.ini
[TCP DEFAULT]
SendBufferMemory=2M
ReceiveBufferMemory=2M

[NDB_MGMD DEFAULT]
PortNumber=1186
Datadir=/export/home/mysql-cluster/

[NDB_MGMD]
Hostname=172.20.100.28

[NDBD DEFAULT]

MemReportFrequency=5

NoOfReplicas=2
Datadir=/export/home/mysql-cluster/
#DataMemory=10240M
#IndexMemory=1280M
LockPagesInMainMemory=1

MaxNoOfConcurrentOperations=100000

StringMemory=25
MaxNoOfTables=4096
MaxNoOfOrderedIndexes=2048
MaxNoOfUniqueHashIndexes=512
MaxNoOfAttributes=24576
DiskCheckpointSpeedInRestart=100M
#FragmentLogFileSize=256M
#NoOfFragmentLogFiles=120
RedoBuffer=32M

TimeBetweenLocalCheckpoints=20
TimeBetweenGlobalCheckpoints=1000
TimeBetweenEpochs=100

### Disk data related
DiskPageBufferMemory=64M
SharedGlobalMemory=256M
[NDBD]
Hostname=172.20.100.28

[NDBD]
Hostname=172.20.100.28

[MYSQLD]
Hostname=172.20.100.28
[MYSQLD]
Hostname=172.20.100.28
[MYSQLD]
Hostname=172.20.100.28
[MYSQLD]
Hostname=172.20.100.28
[MYSQLD]
Hostname=172.20.100.28

[MYSQLD]
Hostname=172.20.100.28
[MYSQLD]
Hostname=172.20.100.28
[MYSQLD]
Hostname=172.20.100.28
[MYSQLD]
Hostname=172.20.100.28
[MYSQLD]
Hostname=172.20.100.28


=====
[root@Solaris1 mysql-cluster]# cat /etc/my.cnf
[MYSQLD]
innodb_buffer_pool_size = 2G
socket=/tmp/mysql.sock
user=mysql
basedir=/usr/local/mysql
datadir=/export/home/mysql/data
#ndb-cluster-connection-pool=10
ndbcluster
ndb-connectstring="172.20.100.28"
ndb-force-send=1
ndb-use-exact-count=0
ndb-extra-logging=1
ndb-autoincrement-prefetch-sz=256
engine-condition-pushdown=1

#REPLICATION SPECIFIC - GENERAL
#server-id must be unique across all mysql servers participating in replication.
#server-id=X
#REPLICATION SPECIFIC - MASTER
#log-bin
#REPLICATION SPECIFIC - SLAVE
#slave-allow-batching
#skip-slave-start

#OTHER THINGS, BUFFERS ETC
key_buffer = 256M
max_allowed_packet = 16M
sort_buffer_size = 512K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
thread_cache_size=1024
myisam_sort_buffer_size = 8M
init_connect='set autocommit=1'
#memlock
sysdate_is_now
max-connections=1050
thread-cache-size=64
skip_thread_priority
query-cache-type = 0
query-cache-size = 0
table-open_cache=1024
table-cache=512
lower-case-table-names=0
[root@Solaris1 mysql-cluster]#
=====

CREATE VIEW Table_Space AS
SELECT FILE_NAME,
(TOTAL_EXTENTS * EXTENT_SIZE)/
(1024*1024) AS 'Total MB',
(FREE_EXTENTS * EXTENT_SIZE)/
(1024*1024) AS 'Free MB',
EXTRA FROM INFORMATION_SCHEMA.FILES
WHERE ENGINE = 'NDBCLUSTER' AND
FILE_TYPE = 'DATAFILE';

インメモリ・データベース

キムラデービーブログ | 第2回 先端的データベースと Web 技術動向講演会

MySQL Clusterが入っていないのが残念。

しかし、この講演会タイトルは、かなり胡散臭い。
「先端的データベース」って。。。

「株式会社高速屋」は、確か数年前に有楽町駅近くでやっていた「データベースEXPO」か何かで、ブースを訪問した記憶がある。
が、結構前なので、内容は記憶に無い。

Index Merge Optimizationの3パターン

MySQL :: MySQL 5.1 Reference Manual :: 7.2.6 Index Merge Optimization

7.2.6.1. The Index Merge Intersection Access Algorithm 7.2.6.2. The Index Merge Union Access Algorithm 7.2.6.3. The Index Merge Sort-Union Access Algorithm

MySQL ユーザコンファレンス - 開催概要 - サン・マイクロシステムズ

MySQL Users Conference 2008 Tokyo

とか、

MySQL Users Conference 2008 Japan

などでは無くて、

MySQL ユーザコンファレンス 2008

らしい。
これだと、4月にアメリカでやってるカンファレンスと、区別つかないんじゃないかなあ。