我的应用程序非常密集数据库.目前,我正在运行MySQL 5.5.19并使用MyISAM,但我正在迁移到InnoDB.剩下的唯一问题是校验和性能.
我的应用程序在高峰时间每秒执行大约500-1000"CHECKSUM TABLE"语句,因为客户端GUI不断轮询数据库以进行更改(它是一个监视系统,因此必须非常快速响应和快速).
使用MyISAM,有一些Live校验和在表修改时预先计算,并且非常快.但是,InnoDB中没有这样的东西.所以,CHECKSUM TABLE很慢......
我希望能够检查表的最后更新时间,不幸的是,这在InnoDB中也不可用.我现在卡住了,因为测试表明应用程序的性能急剧下降......
有更多的代码行更新表,因此在应用程序中实现逻辑表更改是不可能的......
数据库生态系统由一个主na 3从属组成,因此不能选择本地文件检查.我想到了一种模拟校验和缓存的方法 - 一个包含两列的查找表 - table_name,checksum,并在表中发生更改时更新该表和触发器,但我有大约100个要监视的表,这意味着每个表有3个触发器= 300个触发器.很难维护,我不确定这不会再次成为一次表现.
那么有没有任何FAST方法来检测InnoDB表中的变化?
谢谢!
我最近使用apache 2.2.15,PHP 5.4.11和APC 3.1.14将我的Web服务器切换到Centos 6.3.
我开始不时收到客户的投诉,页面无效,或出现奇怪的错误.我看到受影响的页面在输出中的随机位置有问号和其他奇怪的符号,即使源是正常的.当我更改源文件中的单个字母时,页面开始正常工作.
我怀疑APC,但我找不到任何线索何时以及为什么会发生这种情况.
我使用mercurial将更改推向生产,但我已经使用这种方法多年没有问题.也许配置中的某些东西现在是新的,但遗憾的是我没有保留我的旧配置.
以下是上次损坏的截图.

编辑:这是我更改源中的单个字符,保存它,然后撤消文件后的响应(如果我只是重新启动Web服务器或清除APC操作码缓存):

请注意,行号不匹配,但它是100%相同的请求,因此响应也应该相同.第一个屏幕截图中的第111行根本不应该存在.它似乎来自另一个源文件......
我只有一个专用的过滤器索引.
那里有3000疑问.这是一个典型的查询:
{
"index": "articles_percolators",
"type": ".percolator",
"body": {
"query": {
"filtered": {
"query": {
"bool": {
"should": [
{
"query_string": {
"fields": [
"title"
],
"query": "Cities|urban|urbanization",
"allow_leading_wildcard": false
}
},
{
"query_string": {
"fields": [
"content"
],
"query": "Cities|urban|urbanization",
"allow_leading_wildcard": false
}
},
{
"query_string": {
"fields": [
"url"
],
"query": "Cities|urban|urbanization",
"allow_leading_wildcard": false
}
}
]
}
},
"filter": {
"bool": {
"must": [
{
"terms": {
"feed_id": [
3215,
3216,
10674,
26041
]
} …Run Code Online (Sandbox Code Playgroud)