【问题标题】:MYSQL Temporary Tables - How to view active onesMYSQL 临时表 - 如何查看活动表
【发布时间】:2011-08-17 12:24:24
【问题描述】:

我们公司有一个简单的“类似 crm”的软件。有一些复杂的查询需要一些时间,日常使用的查询......所以我正在测试一些修改以使用临时表来替换我们需要的所有复杂的连接和子查询。

到目前为止进展顺利,速度达到了 90% 以上。

由于它是一个网络应用程序(codeigniter + mysql),我计划将其置于“生产测试”环境中,以便 50% 的用户可以帮助我对其进行测试。我想监控处于活动状态的表,如果可能,还要监控每个连接。

我的问题是 - 有什么方法可以查看在 mysql 实例中处于活动状态的所有临时表?也许查看它的数据?

我读过一些关于 PLUGIN 或类似的东西,但这篇文章太混乱了,我无法理解。

非常感谢,对不起我的英语——不是我的母语。

【问题讨论】:

标签: mysql mysql-management temp-tables


【解决方案1】:

临时表 = 临时表,在查询后立即删除

没有直接的解决方案,除了记录所有查询并逐一执行以检查哪个查询需要 tmp_table

Created_tmp_tables 这样的系统变量可能会提供一些想法

mysql> show status like '%tmp%';
+-------------------------+-------+
| Variable_name           | Value |
+-------------------------+-------+
| Created_tmp_disk_tables | 0     |
| Created_tmp_files       | 0     |
| Created_tmp_tables      | 0     |
+-------------------------+-------+

【讨论】:

    【解决方案2】:

    临时表的一个问题实际上是跟踪使用情况,然后是创建、索引和删除它们的开销——特别是对于临时表的生命周期通常与 HTTP 的生命周期一样长的 Web 应用程序请求。

    在预编译结果(即物化视图)将受益的地方,我设置了一个常规表,添加了引用 MySQL 连接 ID / Web 会话 ID / 源查询 + 生成时间的字段,具体取决于数据的 TTL 以及是否共享。

    除了详细跟踪表的使用情况之外,它还可以更轻松地解决查询调优问题,当然,架构也有更好的文档记录。

    【讨论】:

      【解决方案3】:

      当您的数据集变得更大时,临时表将无济于事。最后,他们如何提供帮助?计算结果后必须将数据复制到这些表中,为什么不使用 memcached 缓存结果?

      此外,我还看到有些数据库有些大(数十 GB),并且在单台机器上运行,并且查询运行速度很快。有一个问题是您是否正确配置了数据库服务器(软件和硬件)。您可能会遇到暂时的加速,但不能保证它会永久有效。我会优化运行应用程序所需的应用程序、查询、软件和硬件,然后我会使用 memcache 缓存结果,除非您需要查询结果的最新热拷贝。

      【讨论】:

      • 不同意。当您对来自大量表的数据进行多次更新时,临时表对于复杂查询非常有用。
      • @michaelhanon 你不同意并没有提到或引用一个事实。这只是意味着这是您的个人意见。您可以不同意,但这并不意味着您是正确的。
      【解决方案4】:

      我认为在视图临时表中没有意义,因为它们在连接期间存在并在关闭连接后死亡。但是关于临时表有一个重要的事实。因此,如果您在脚本中使用持久连接,则临时表将在此连接的生命周期内存在,并且使用此连接的客户端将可以访问相同的临时表。同样在这种情况下,临时表将消耗系统资源。为了避免这种情况,您应该在运行使用此临时表的必要查询后手动删除临时表。

      【讨论】:

        猜你喜欢
        • 2022-09-23
        • 1970-01-01
        • 2015-01-20
        • 1970-01-01
        • 1970-01-01
        • 2015-12-15
        • 2019-11-11
        • 2018-08-03
        • 2012-01-23
        相关资源
        最近更新 更多