ndb_force_send=1で強制的に要求
0でちょっと(10mm sec.)待つ:ネットワークアクセスのオーバーヘッドは増えるが、スループットは増えるかも?
チューニングには、レスポンスタイム重視、またはスループット重視、の二通りがある。
MySQL Cluster 6.3では、PK検索時に性能良くなる。
ただしData Nodeが4つ以上でないと、あまり効果無いかも。
MySQL ClusterのInjector Threadはリアルタイム処理のみ。バッファなどの機能は無い。
ndb_force_send=1で強制的に要求
0でちょっと(10mm sec.)待つ:ネットワークアクセスのオーバーヘッドは増えるが、スループットは増えるかも?
チューニングには、レスポンスタイム重視、またはスループット重視、の二通りがある。
MySQL Cluster 6.3では、PK検索時に性能良くなる。
ただしData Nodeが4つ以上でないと、あまり効果無いかも。
MySQL ClusterのInjector Threadはリアルタイム処理のみ。バッファなどの機能は無い。
1. UNIQUE KEY
HASHとBTREEのインデックスが作成される
2. KEY
3. UNIQUE KEY USING HASH
HASHインデックスのみが作成される
HASHインデックスは、「一致検索」のみで利用される。
部分一致などは不可。
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のテーブルスペースみたいに、自動拡張オプションがあってもいいのに。
暇つぶしに、掲題。
ファイルは基本上書き
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」か何かで、ブースを訪問した記憶がある。
が、結構前なので、内容は記憶に無い。
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月にアメリカでやってるカンファレンスと、区別つかないんじゃないかなあ。