我有一个应用程序正在向我的mySQL数据库发送函数调用。一旦被发送,函数就会做它需要做的事情(包括单行选择、插入和按索引更新)。
现在,我每天可以进行大约一百万次mySQL调用。这些mySQL函数调用被分解成我的应用程序的实际“调用”,这些调用可以是1到20个不同的mySQL函数调用。我的应用程序每天收到大约120,000个“应用程序函数调用”。
我有12 to的内存,所以我将InnoDB内存中的内存从2 to提高到了8 to,而且看起来没有增加。接下来,我想,如果一个线程得到了这么多,添加线程会增加它。所以我这样做了,现在我看到了成堆的索引锁定错误。
我知道MySQL说可以简单地重新发送请求,这很有效,但我没有看到速度有多大的提高。在我这一端,不管线程是什么,我基本上达到了180,000个"app函数调用“的最大值,而单线程大约是120,000个。这是因为一旦我有了大约2-3个线程,它就会经常出现线程锁定错误。
现在我的每个表都有大量的索引以提高搜索效率,因为我有数百万行。但是,我计划复制这个数据库,以便一个新实例在从数据库上执行大部分搜索,同时在我的主数据库上维护主数据(即所有的更新/插入)。正因为如此,我在想,除了主键和唯一键之外,删除主键上的所有索引可能会降低这个值?然后我可以在从服务器上添加索引。然而,如果索引不同,我甚至不确定使用mySQL的基本复制功能是否有效,因为这是我第一次尝试使用它。
任何建议,我应该做什么,使这更有效。现在,MySQL在给定的一天内处理了我所需要的大约1/20。
我很感谢你的反馈。
发布于 2011-07-19 04:01:26
您需要分析您的查询,以确保它们尽可能高效。使用内置的执行计划描述流程(解释或MySQL管理控制台中的执行计划可视化工具)来帮助您找出查询陷入困境的位置。
在硬件解决方案方面,如果您不是完全在内存中执行,请考虑将磁盘升级到SSD;它们提供的吞吐量可能非常大(例如,IOPS比旋转锈高2个数量级)。
发布于 2011-07-19 04:02:50
您运行的是什么MySQL版本?MySQL的最新版本大大改进了InnoDB并发性。您可能还想尝试一下Percona MySQL构建。
您还可以提供更多有关表结构和查询的详细信息吗?当您说INSERT和UPDATE是按索引时,您是指主键,还是指辅助索引?
发布于 2011-07-19 04:15:14
1-也许你应该尝试对你的表进行分区。这将减少需要锁定的索引部分的大小。
2- http://www.youtube.com/watch?v=Oon06s9dXrY
3-尝试通过不同的工作场景来分隔你的线程。一个线程用于一种类型的操作(例如订单注册),另一个线程用于其他类型的操作(用于授权检查)。这会显著降低并发级别。
4-如果可能,将缓存级别添加到应用程序中
https://stackoverflow.com/questions/6738646
复制相似问题