我对 AWS 非常陌生。insertAmazon RDS 表上的一次记录操作是否算作 1 IOP?
我有一个每天插入大约 100 万条记录的用例,并且希望该作业在大约 10-20 分钟内完成运行。这会算作 100 万 IOP 吗?这是否意味着我的 IOPS 应该是 1000000/(10*60) = 1667 IOPS?
此外,select查询会算作 1 IOP 还是等于返回的记录数?
将选择查询计数为 1 IOP 还是等于返回的记录数?
不会。假设Amazon准确地计算了IOP(毕竟它们是虚拟机),那么SQL和磁盘IO操作之间存在一些抽象:
com_selectSQL 操作:可以通过、com_insert等计数器看到SHOW GLOBAL STATUS。请注意,如果您有像 query_cache 这样的缓存,则几乎不会执行任何磁盘操作(因为结果将直接从内存返回)。'Handler_%'处理程序(“行”)操作:可以通过计数器看到SHOW GLOBAL STATUS我没有详细介绍 MySQL 和操作系统的内部结构,即使不这样做,你也可以看到事情并不明显——事实上,减少 IO 并了解为什么在某些情况下会有如此多的 IO 是最重要的领域之一数据库优化。
像 InnoDB 这样的引擎将要求其所有页面在插入时写入 3 或 4 次(一次在事务日志上,一次在实际表空间上,一次在双写缓冲区上,还可以选择在二进制日志上) - 这是一种简化 - 它不需要考虑索引更新、元数据、统计信息等。了解您需要多少 IOPS 的最佳方法是在特定设置上进行测试。即使有一些假的较小的测试,它也会比理论更可靠。在操作系统和数据库级别进行缓存将使数字显着不同。
例如,有一天我以 200.000 行/秒的速度插入了数千万条记录LOAD DATA(没有 SQL 开销),因为我有足够的内存几乎只写入 InnoDB 缓冲池。不过,磁盘需要几分钟时间才能与内存内容同步。
| 归档时间: |
|
| 查看次数: |
1273 次 |
| 最近记录: |