- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们每天都在构建从推文用户 ID 到该用户发布的推文的推文 ID 列表的映射。我们使用的存储引擎是 Percona xtraDB "5.1.63-rel13.4 Percona Server (GPL), 13.4, Revision 443"
我们对每秒插入行的最大吞吐量不满意。我们使用 xtraDB 处理推文的最大吞吐量约为每秒 6000 ~ 8000 条推文。 (例如,如果我们从头开始重建某天的数据,我们将不得不等待将近一天)
在大多数情况下,我们能够使用全部 Twitter 数据(大约每秒 4000 ~ 5000 条推文)足够实时地完成此操作。
我们已经将应用程序的瓶颈缩小到 MySQL InnoDB 插入。在我们的应用程序中,我们从磁盘读取提要并使用 jackson 对其进行解析(每秒大约发生 30,000 条推文)。然后,我们的应用程序会分批处理推文。对于生成这些推文的一组作者,我们将他们分成 8 组(使用用户 ID 模 8 进行简单分区)。为每个组分配一张表,并分配 1 个线程将数据写入该表。每天大约有 2600 万唯一用户生成这些推文,因此每个表大约有 400 万行。对于一组用户,我们只使用一个事务进行读取和更新。组大小是运行时可调的。我们尝试了 8 ~ 64000 的各种大小,我们确定 256 是一个很好的批量大小。
我们表的架构是
CREATE TABLE `2012_07_12_g0` ( `userid` bigint(20) NOT NULL, `tweetId` longblob, PRIMARY KEY (`userid`)) ENGINE=InnoDB DEFAULT CHARSET=utf8
其中 tweetId 是推文 ID 长整数的压缩列表,使用 Google snappy 压缩
每个线程使用
Select userid,tweetId from <tablename> where userid IN (....)
解析userids回读数据,线程使用
INSERT INTO <tablename> (userid,tweetId) VALUES (...) ON DUPLICATE KEY UPDATE tweetId=VALUES(tweetId)
用新的 tweetid 更新行。
我们已尝试设置各种 XtraDB 参数
innodb_log_buffer_size = 4M
innodb_flush_log_at_trx_commit = 2
innodb_max_dirty_pages_pct = 80
innodb_flush_method = O_DIRECT
innodb_doublewrite = 0
innodb_use_purge_thread = 1
innodb_thread_concurrency = 32
innodb_write_io_threads = 8
innodb_read_io_threads = 8
#innodb_io_capacity = 20000
#innodb_adaptive_flushing = 1
#innodb_flush_neighbor_pages= 0"
每天的表大小约为所有表的 8G,InnoDB 有 24GB 可供使用。
我们正在使用:
如果有任何能让我们的插入速度更快的提示,我们将不胜感激,谢谢。
最佳答案
InnoDB is given 24GB
你是说这是 innodb_buffer_pool_size 吗?你没有说你有多少内存,也没有说你正在使用什么 CPU。如果是这样,那么您可能应该使用更大的 innodb_log_buffer_size。 innodb_log_file_size 的设置是什么?它应该在 96Mb 左右。
innodb_write_io_threads = 8
ISTR 认为 ext3 与多个编写器存在一些并发问题 - 但我不知道 ext4
您是否尝试过更改 innodb_flush_method?
您使用哪个 I/O 调度程序(在没有智能磁盘 Controller 的情况下,通常 deadline 最快,有时是 CFQ)?
关闭 ext4 屏障将有助于提高吞吐量——这有点冒险——确保你在 JBD2 中启用了校验和。类似地设置 innodb_flush_log_at_trx_commit=0 应该会显着增加但风险更大。
既然您显然不介意以关系格式维护数据,那么您可以考虑使用 noSQL 数据库。
关于mysql - 放弃写入 InnoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11464031/
我已经在我的 windows7 机器上安装了 bugzilla4.2.5。当我运行 bugzilla 的 checksetup.pl 脚本时,它显示 Use of uninitialized valu
我正在使用 MySQL 5.1.56 我有一个包含大约 70 个表的数据库,我有一个特定损坏的表的问题,例如表_X 当我尝试访问表时mysql> 从 Table_x 中选择 *;ERROR 1105
我最近尝试将 MySQL 5.1 服务器升级到 5.7。当服务器无法启动时,我发现您必须先导出数据,然后再进行大量升级(二进制文件不再可用),所以我回滚到 5.1 进行导出。 问题是,回到 5.1,I
我正处于项目的开始阶段,到目前为止我一直在使用默认的 MySQL 数据库。 对了,默认的数据库有名字吗? 我的问题是如何在不删除当前表和创建新表的情况下将现有表更改为 utf-8 和 InnoDB。是
我最近尝试将 innodb 缓冲池大小增加到 8GB,但在我的 innodb 状态下,池大小看起来像之前配置的值(在我的例子中是 500MB)。 ---------------------- BUFF
我是一家网络酒店的幸运老板,店主会在不知情的情况下更改设置。当这么说时,我的数据库中有一些表正在使用 InnoDB 引擎运行。但是晚上主机禁用了 InnoDB,所以我无法使用 ALTER 命令将其转换
我刚刚将数据库从 MyISAM 引擎迁移到 InnoDB。我使用 mysqldump 备份我的 MyISAM 数据库,但是当我查看 MySQL docs ,对于 InnoDB 表,我还需要保存二进制文
环境: Windows 7(XAMPP 最新版) Apache 2.4.4PHP 5.5MySQL 5.6.11 我正在尝试从 MySQL 5.1 备份数据库并将其导入 MySQL 5.6。 在 My
我正在创建的应用程序主要使用选择,但也有一些是插入、更新等。我想知道在这些情况下哪种性能最好。 其次,当我在 innodb 中有两个相关的表时,如果它与另一个表中的行相关,我该如何删除它而不吐出错误?
我的意思是页面: https://dev.mysql.com/doc/internals/en/innodb-page-structure.html 这些 16KB 的 MySQL 页面会在内存或磁盘
以下是我使用 mysqldump 备份数据库的开关: /usr/bin/mysqldump -u **** --password=**** --single-transaction --databas
我阅读了本网站上的大部分 InnoDB 示例,但我对 InnoDB 的行为一无所知。 据我所知 START TRANSACTION; 声明这是一个事务连接。没关系到这里。现在我有 3 个表: 带有 I
我有一个包含混合表(MyISAM、InnoDB)的 MySQL 数据库。 如何通过 Linux 命令行使用 mysqldump 创建数据库的完整备份,我应该使用什么选项? 最佳答案 在下面使用- 所有
我有一张桌子:。我用Python在这个表中插入了大约400k行。以下是INSERT语句:。我在两个表tab1.col1和tab2.col2上都有一个索引。但是插入大约需要5分钟/1000行的时间。我从
我正在尝试使用 WAMP 在本地服务器上安装 Magento。 InnoDB 被设置为默认引擎,但它仍然向我显示消息: Database server does not support InnoDB
我最近将所有表从 MyISAM 移到了 InnoDB,因为我想摆脱大表上的表锁定。 在以下表上运行 UPDATE 或 INSERT 查询花费的时间比预期的要多很多。 (约 5 分钟) 我如何优化 in
我正在运行带有 XAMPP 的 Windows 10 和在本地主机上安装的几十个 Drupal 站点。几个月来一切都运行良好。 今天早上,我从两天前的还原点执行了 Windows 还原,以删除不需要的
Socialengine 4.8.6 - 启动时显示“白屏”,只能通过浏览器访问 sesystem.com/phpmyadmin 和 sesystem.com/install。 问题开始:我需要一个包
由于 InnoDB 在 B+ 树中组织其数据。树的高度影响 IO 次数,这可能是 DB 变慢的主要原因之一。 所以我的问题是如何断言或计算B+树的高度(例如根据可以通过行大小、页面大小和行号计算的页数
我尝试使用 mysqldump 从系统 A 使用 innodb 默认存储引擎将大约 40gb 的数据库 db1 转储到 sql 文件中,并尝试在另一个系统 B 上恢复它。两者都有默认存储引擎 inno
我是一名优秀的程序员,十分优秀!