【发布时间】:2011-07-18 19:56:16
【问题描述】:
我有一个应用程序正在向我的 mySQL 数据库发送函数调用。发送后,该函数会执行所需的操作(包括单行选择、按索引插入和更新)。
现在我每天可以进行大约一百万次 mySQL 调用。这些 mySQL 函数调用被分解为我的应用程序的实际“调用”,可以是 1 到 20 个不同的 mySQL 函数调用。我的应用每天收到大约 120,000 次“应用函数调用”。
我有 12 gigs 的 RAM,所以我将我的 InnoDB 内存 RAM 从 2 gigs 提高到 8 gigs 并且似乎没有增加。接下来我想,如果 1 个线程越来越多,添加线程会增加它。所以我这样做了,现在我看到了大量的索引锁错误。
我知道 MySQL 说简单地重新发送请求,这是可行的,但我没有看到速度有很大提高。无论线程如何,当单线程大约为 120,000 时,我基本上最多可以在我的一端进行 180,000 个“应用程序函数调用”。这是因为一旦我有大约 2-3 个线程,它就会不断出现线程锁定错误。
现在我的每个表都有大量索引以提高搜索效率,因为我有数百万行。但是,我计划复制这个数据库,以便一个新实例在 SLAVE 上进行大部分搜索,而主要数据保存在我的 MASTER 上(这是所有更新/插入)。因此,我在想,除了主键和唯一键之外,删除 MASTER 上的所有索引可能会降低这一点吗?然后我可以在 SLAVE 上添加索引。但是,如果索引不同,我什至不确定这是否可以使用 mySQL 的基本 REPLICATION 功能,因为这是我第一次尝试使用它。
关于我应该做些什么以使其更有效的任何建议。目前,MySQL 正在处理大约 1/20 我每天需要它处理的内容。
感谢任何反馈。
【问题讨论】:
标签: mysql database optimization locking innodb