大约2个月前,我将EnWikipedia数据(http://dumps.wikimedia.org/enwiki/20120211/)导入了mysql。
完成导入EnWikipedia数据后,我一直在mysql的EnWikipedia数据库表中创建索引大约2个月。
现在,我已经达到了在“pagelinks”中创建索引的程度。
然而,似乎需要无限的时间来传递这一点。
因此,我检查了剩下的时间,以确保我的直觉是正确的。
因此,预计剩余时间为60天(假设我从头开始再次在“pagelinks”中创建索引。)
My EnWikipedia database has 7 tables:
"categorylinks"(records: 60 mil, size: 23.5 GiB),
"langlinks"(records: 15 mil, size: 1.5 GiB),
"page"(records: 26 mil, size 4.9 GiB),
"pagelinks"(records: 630 mil, size: 56.4 GiB),
"redirect"(records: 6 mil, size: 327.8 MiB),
"revision"(records: 26 mil, size: 4.6 GiB) and "text"(records: 26 mil, size: 60.8 GiB).
我的服务器是...... Linux版本2.6.32-5-amd64(Debian 2.6.32-39),内存16GB,2.39Ghz Intel 4核心
创建索引需要这么长时间的常见现象吗? 有没有人能够更快地创建索引?
提前致谢!
P.S:我做了以下操作来检查剩余时间。
参考文献(对不起,以下页面用日文写成):http://d.hatena.ne.jp/sh2/20110615
第一。我在“pagelink”中收到了记录。
mysql> select count(*) from pagelinks;
+-----------+
| count(*) |
+-----------+
| 632047759 |
+-----------+
1 row in set (1 hour 25 min 26.18 sec)
第二。我得到了每分钟增加的记录数量。
getHandler_write.sh
#!/bin/bash
while true
do
cat <<_EOF_
SHOW GLOBAL STATUS LIKE 'Handler_write';
_EOF_
sleep 60
done | mysql -u root -p -N
命令
$ sh getHandler_write.sh
Enter password:
Handler_write 1289808074
Handler_write 1289814597
Handler_write 1289822748
Handler_write 1289829789
Handler_write 1289836322
Handler_write 1289844916
Handler_write 1289852226
第三。我计算了录音的速度。
根据2.的结果,记录速度
7233 records/minutes
第四。然后剩下的时间是
(632047759/7233)/60/24 = 60 days
答案 0 :(得分:7)
那些是非常大的表,所以我希望索引很慢。 6.3亿条记录是很多要索引的数据。要看的一件事是分区,数据集很大,没有正确分区的表,性能会很慢。这是一些有用的链接: using partioning on slow indexes您还可以尝试查看用于构建索引的缓冲区大小设置(默认值为8MB,适用于您的大型表格,这会使您慢慢减慢。buffer size documentation