【发布时间】:2019-04-09 16:21:50
【问题描述】:
所以我在将数据库从一台网络服务器迁移到另一台时遇到了问题。 服务器 1 在 cPanel 托管下运行 MySQL 5.6 版... 服务器 2 在 Webmin/Virtualmin 下运行 MariaDB 5.5 版 两者的PHP版本相同...5.6
无论如何,我想将站点从服务器 1 移动到服务器 2。我使用 HeidiSQL 导出数据库,然后在服务器 2 上导入数据。数据导入正常,但查询性能差 10 倍.我检查了缓冲区大小变量和所有其他“关键”变量,它们在服务器 2 上是相同的或增加的。 我尝试将存储引擎从 MyIsam 更改为 Aria 或 InnoDB,但结果相同……我还优化了整个数据库,但还是没有运气。两台服务器上的索引相同。
然后我决定将数据库重新托管在原始服务器上,并从新服务器加载文件....我导出了新数据库(仅使用插入忽略的数据)并将该 SQL 导入回服务器 1。立即导入后,原始数据库也开始缓慢执行...... 除非我使用第一次移动数据库时的原始备份,否则无论我如何将数据库更新为新数据,它都会开始表现不佳......
现在需要 35 秒才能运行的查询示例,而以前需要 3 秒:
select p.*, pd.ID detailID,
s.title subject, s.displayTitle, s.memberPanCode,
s.virtualDelivery,
CASE WHEN (DATE_ADD(p.releaseDate, INTERVAL 2 WEEK) > NOW()) THEN 1 ELSE 0 END pNew,
CASE WHEN(s.publicChoice=1) THEN s.memberPanCode ELSE '' END usableSubject,
CASE WHEN(s.displayTitle=1) THEN s.ID ELSE '0' END subjectID from sProduct p
inner join sProductDetail pd ON pd.ID_sProduct=p.ID
left join sProductDetailWarehouse pdw ON pdw.ID_sProductDetail=pd.ID
left join sProductDetailSubjectPrice pdsp ON pdsp.ID_sProductDetail=pd.ID
left join sSubject s ON (s.memberPanCode=pdsp.memberPanCode
and s.shownOnSite=1)
where ( s.publicChoice=1
OR s.defaultSubject=1
OR s.memberPanCode=''
OR s.memberPanCode IS NULL
)
AND ( (pd.ID > 0 AND s.displayTitle IS NOT NULL)
OR (pd.ID IS NULL AND s.displayTitle IS NULL )
OR (pd.ID > 0 and p.ID_sSupplier > 0 )
OR (pd.ID > 0 and pdsp.ID IS NULL )
OR (pd.ID > 0 and s.displayTitle IS NULL )
)
AND (DATE_ADD(NOW(), INTERVAL 1 DAY) > p.showDate)
AND ( pdw.stock > 0
OR pd.stock > 0
OR (p.ID_sSupplier > 0 AND p.ID_sSupplier <> '3')
)
and p.published IN (1,2)
GROUP BY p.ID, s.memberPanCode
order by p.showDate desc
limit 3
知道还有什么需要检查的吗?我该怎么做才能解决这个问题?
感谢您的帮助
【问题讨论】:
-
机器的规格是什么,网络接口是什么(网络问题?)我假设你在最新的 MariaDB 下运行?
-
实际上是同一台机器,两者的硬件规格相同(最细微的细节)。我正在运行 Virtualmin 官方支持的最新 MariaDB,遗憾的是 5.5
-
有无数种可能性。加快搜索速度... 如果您发现任何查询似乎较慢,让我们研究一下。如果没有,用
long_query_time=0.2打开slowlog,收集一天的结果,通过pt-query-digest总结,然后我们看一下最慢的几个查询。从那以后,我们应该能够回溯到真正的原因是什么。 -
还添加了说明语句...
-
两台机器上好像有一组不同的索引??
标签: php mysql performance mariadb