查询很慢

Queries are very slow

我用 CMS Typo3 建立了一个网站。一切正常,但我有性能问题。前端生成速度非常慢。所以我决定安装扩展"T3Profiler"来分析问题。

我在探查器查询中发现:

SELECT content FROM cf_cache_hash WHERE identifier = 'f33c135b63eac6bb7194edab51f3c57a' AND cf_cache_hash.expires >= 1441015330 LIMIT 1

此类查询需要 90.000 - 600.000 毫秒。为什么这个选择这么慢?如何解决我的问题?

有人可以给我提示吗?

有时,当 sys_log*_cache_* 和其他系统表增长到巨大的规模时,会导致查询它们变得更慢、更慢……虽然它们经常在常见的渲染过程中被访问,但它们可以成为真正的性能杀手

有几种解决方法:

  • 添加调度程序的任务以定期清理这些表,即 sys_log 并且可以在 ie 之后清除历史条目。 30 天,尤其是当系统处于开发状态并且 maaaany 每天都进行更改时。
  • 检查表中填充的内容 - 即某些扩展程序可能会向 sys_log 添加数百个日志,即当某些方法未获得某些预期参数时 - 如果它在循环中使用并收集了数百个项目,则记录器有每个请求 (!) 写入错误数百次,修复代码以避免此类情况
  • 通过安装工具确保所有表结构正确> 将当前数据库与规范进行比较
  • 最后使用您的数据库 GUI 优化 and/or 修复 表。

除了@biesior 的回答之外,另一个技巧是将缓存存储在您的 TYPO3 数据库之外,因为数据选择已经使数据库承受了足够的压力。

对于 TYPO3 7.x 我在 AdditionalConfiguration.php 中是这样做的:

$redisCacheOptions = [
    'hostname' => 'localhost',
    'port' => 6379,
    'database' => 2,
    'password' => '******',
];
$cacheConfigurations = [
    'cache_hash',
    'cache_imagesizes',
    'cache_pages',
    'cache_pagesection',
    'cache_rootline',
    'extbase_datamapfactory_datamap',
    'extbase_object',
    'extbase_reflection',
    'extbase_typo3dbbackend_queries',
    'extbase_typo3dbbackend_tablecolumns'
];
foreach ($cacheConfigurations as $cacheConfiguration) {
    $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations'][$cacheConfiguration]['backend'] = \TYPO3\CMS\Core\Cache\Backend\RedisBackend::class;
    $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations'][$cacheConfiguration]['options'] =
        $redisCacheOptions + (array)$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations'][$cacheConfiguration]['options'];
}