查询非常慢

时间:2015-09-01 15:36:57

标签: typo3

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

我在Profiler查询中找到了:

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

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

有人能给我一个暗示吗?

2 个答案:

答案 0 :(得分:1)

有时,当sys_log*_cache_*等系统表增长到庞大的大小时,它会导致查询它们变得更慢和更慢......虽然它们经常在常见的渲染过程中被访问,但它们可能会变成真正的表演杀手

有几种解决方法:

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

答案 1 :(得分:0)

除了@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'];
}