mysql - Innodb 插入速度非常慢 : 65secs for 1K entries in empty table

标签 mysql insert innodb database-performance

我注意到我的 mysql 插入速度非常慢。为了测试和演示,我使用了下表:

+----------+-----------------------------------------------+
| Table    | Create Table                                  |
+----------+-----------------------------------------------+
| ik_b64_8 | CREATE TABLE `incr_tbl` (
  `cnt` int(11) NOT NULL,
  PRIMARY KEY (`cnt`)
) ENGINE=InnoDB DEFAULT CHARSET=ascii COLLATE=ascii_bin |
+----------+-----------------------------------------------+

和Python代码:

def profile_basic(cnt):
    db = database.Connection("localhost","testing_delme","root", "")
    t1 = time.time()
    for ii in range(cnt):
        db.execute("INSERT INTO testing_delme.incr_tbl VALUES (%s)", ii)
    print time.time() - t1

当我在空表上运行此仅插入代码时,1K 插入需要 65 秒。我有 innodb_flush_log_at_trx_commit = 1 我需要它,因为表不能丢失任何数据。我的问题是,有了这套,插入会变得这么慢吗?还是我还遗漏了其他东西?

最佳答案

“不能丢失任何数据。”这只是程度问题。如果不刷新,您可能会丢失最后一秒的数据。通过刷新,您可能只会丢失当时正在写入的内容。您真的想因此而遭受巨大的性能损失吗?

此外,如果您的磁盘损坏,您将丢失自上次备份以来的所有数据,从长远来看,这是不可避免的,并且涉及更多数据,因此我会更担心频繁备份。

禁用冲洗。我认为由于所有磁盘事件,每次插入很容易花费数十甚至数百毫秒。表格上有一些索引会使情况变得更糟。

尽管如此,如果您绝对必须在每次写入时刷新,那么如果将数据库放在 SSD 上,您还会看到性能的巨大提升。

关于mysql - Innodb 插入速度非常慢 : 65secs for 1K entries in empty table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10403057/

相关文章:

mysql - Mysql查找跨行的日期范围

MYSQL 如果存在则更新,否则插入。几乎可以工作,除了一件事

php - 如何在 php 和 sql 中将标签插入 3 表系统

Mysql 'Got error -1 from storage engine'错误

MySQL:创建表时出现 FK 错误 (errno 150)

php - MYSQL 获取行到不同的表

mysql - mysql查询中<>符号的含义

php - 我应该用 is_resource 还是 mysqli_ping 检查 MySQL 连接?

MySQL INSERT IGNORE 不起作用

Mysql:在我的本地计算机上观察到插入和更新都非常慢