Được rồi, đây có thể là ba câu hỏi. Tôi muốn chuyển cơ sở dữ liệu MySQL 5.1 hiện tại của mình bằng MyISAM sang 5.6 bằng InnoDB vì những gì tôi nghĩ là một loạt các lý do rõ ràng - và thậm chí có thể tốt -.
Đây là trên Amazon RDS, vì vậy lộ trình nâng cấp của tôi bị giới hạn trong việc bán phá giá và tạo lại cơ sở dữ liệu.
Tôi sẽ vui vẻ thú nhận rằng tôi không phải là một DBA tinh vi.
Vấn đề 1: Wow là chậm!
Mất khoảng 15 phút để mysqldump
các hàng 160 triệu lẻ của chúng tôi. (Hiển thị bảng vv đang đến, giữ ngựa của bạn.)
Phải mất khoảng 50 giờ để tải nó vào một phiên bản mysql 5.6 với công cụ sed-script-ed thủ công cho InnoDB.
Vấn đề 2: Đâu là tôi hàng ?
select count(*) from node;
trên DB hiện tại cho khoảng 162 triệu. Trên 5.6, nó cho khoảng 93 triệu. Tải có vẻ thành công, mặc dù tôi không thể chứng minh điều đó; ít nhất, không có thông báo lỗi sau khi tải kết thúc.
Nếu nó không thành công, điều đó thực sự chậm.
Vấn đề 3: WOW là chậm!
Vì vậy, select count(*) from node;
hoàn thành trong khoảng thời gian không có gì cả - trong khoảng từ 0,00 đến 0,03 giây theo kết quả truy vấn - vào ngày 5.1. Vào ngày 5.6 với InnoDB, phải mất hơn một phút. Giải thích cho thấy rõ điều này là do sự khác biệt trong cách tối ưu hóa truy vấn - nhưng không rõ tại sao nó lại khác.
Bảng và giải thích
MySQL 5.1
mysql> show create table node\G
*************************** 1. row ***************************
Table: node
Create Table: CREATE TABLE `node` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`graph` varchar(100) CHARACTER SET latin1 DEFAULT NULL,
`subject` varchar(200) NOT NULL,
`predicate` varchar(200) NOT NULL,
`object` mediumtext NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `nodeindex` (`graph`(20),`subject`(100),`predicate`(100),`object`(100)),
KEY `ix_node_subject` (`subject`),
KEY `ix_node_graph` (`graph`),
KEY `ix_node_object` (`object`(255)),
KEY `ix_node_predicate` (`predicate`),
KEY `node_po` (`predicate`,`object`(130)),
KEY `node_so` (`subject`,`object`(130)),
KEY `node_sp` (`subject`,`predicate`(130)),
FULLTEXT KEY `node_search` (`object`)
) ENGINE=MyISAM AUTO_INCREMENT=550671861 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
mysql> select count(id) from node;
+-----------+
| count(id) |
+-----------+
| 163426434 |
+-----------+
1 row in set (0.00 sec)
mysql> explain select count(id) from node;
+----+-------------+-------+------+---------------+------+---------+------+------+------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+------------------------------+
| 1 | SIMPLE | NULL | NULL | NULL | NULL | NULL | NULL | NULL | Select tables optimized away |
+----+-------------+-------+------+---------------+------+---------+------+------+------------------------------+
1 row in set (0.00 sec)
MySQL 5.6
mysql> show create table node\G
*************************** 1. row ***************************
Table: node
Create Table: CREATE TABLE `node` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`graph` varchar(100) CHARACTER SET latin1 DEFAULT NULL,
`subject` varchar(200) NOT NULL,
`predicate` varchar(200) NOT NULL,
`object` mediumtext NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `nodeindex` (`graph`(20),`subject`(100),`predicate`(100),`object`(100)),
KEY `ix_node_subject` (`subject`),
KEY `ix_node_graph` (`graph`),
KEY `ix_node_object` (`object`(255)),
KEY `ix_node_predicate` (`predicate`),
KEY `node_po` (`predicate`,`object`(130)),
KEY `node_so` (`subject`,`object`(130)),
KEY `node_sp` (`subject`,`predicate`(130)),
FULLTEXT KEY `node_search` (`object`)
) ENGINE=InnoDB AUTO_INCREMENT=481239575 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
`` `
mysql> explain select count(id) from node;
+----+-------------+-------+-------+---------------+---------------+---------+------+----------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------+---------------+---------+------+----------+-------------+
| 1 | SIMPLE | node | index | NULL | ix_node_graph | 103 | NULL | 79671827 | Using index |
+----+-------------+-------+-------+---------------+---------------+---------+------+----------+-------------+
1 row in set (0.00 sec)