AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 16969
Accepted
ThinkingMonkey
ThinkingMonkey
Asked: 2012-04-25 10:25:15 +0800 CST2012-04-25 10:25:15 +0800 CST 2012-04-25 10:25:15 +0800 CST

打开和关闭数据库连接的成本是多少?

  • 772

CPU 密集型如何在 MySQL 中打开和关闭数据库连接(对于 Web 应用程序)

  • ...当数据库软件在本地主机上时?
  • ...当数据库软件在另一台机器上时?
mysql database-design
  • 4 4 个回答
  • 22651 Views

4 个回答

  • Voted
  1. Best Answer
    RolandoMySQLDBA
    2012-04-25T10:54:05+08:002012-04-25T10:54:05+08:00

    考虑每个 DB 连接分配的内存量。哪些东西必须分配?根据MySQL 5.0 认证学习指南,第 357 页:

    服务器为每个客户端连接维护几个缓冲区。一个用作与客户端交换信息的通信缓冲区。每个客户端都维护其他缓冲区,用于读取表并执行连接和排序操作。

    哪些设置控制每个连接的缓冲区?

    • 加入缓冲区大小
    • 排序缓冲区大小
    • 读取缓冲区大小
    • read_rnd_buffer_size
    • tmp_table_size / max_heap_table_size
    • net_buffer_length / max_allowed_pa​​cket
    • 线程堆栈

    当连接建立时,分配和释放这些缓冲区需要时间。不要忘记将这些值的总和乘以max_connections。作为旁注,请不要使用mysql_pconnect,因为 PHP 和 MySQL 的持久连接不能很好地相处。以下是有关此主题的两个信息链接:

    • 打开 PHP Not Cleanly Closeing MySQL Connections on Apache Death 上的错误。
    • 请求持久 ssh 连接。

    在诸如 OLTP 之类的重读、重写环境中,这在 RAM 使用方面会很昂贵,并且可能由于操作系统中的交换而受到抑制。在低写入、低读取的网站上,我不会那么担心。

    • 15
  2. Aaron Bertrand
    2012-04-25T10:37:18+08:002012-04-25T10:37:18+08:00

    我不确定它的“成本更高”是否重要。这肯定比重复使用相同的连接更昂贵。您将观察到的情况取决于您是否正确使用连接池、池的饱和程度、盒子上的可用资源等。

    一般来说,如果您正在执行循环以与数据库进行一些交互,那么重用相同的活动连接要比在循环中打开和关闭要好得多(我经常看到的反模式) .

    • 11
  3. Dude
    2012-04-25T14:21:18+08:002012-04-25T14:21:18+08:00

    重复使用一个对象和拆除它并重新构建它之间的困境(两者都有优点和缺点)通常可以通过妥协来解决:缓存对象,但时间有限(即到期)。如果该对象被频繁访问,那么它就会不断被重用。但是,如果它有一段时间没有使用,那么到期机制就会处理它,迫使它在再次需要时重新创建。

    系统可以为这些类型的缓存设置一个全局挂钩,当内存不足时调用该挂钩,这会触发所有缓存删除最近未使用的对象。

    • 4
  4. greenlitmysql
    2016-02-17T20:23:41+08:002016-02-17T20:23:41+08:00

    Mysql 使用线程缓存(thread_cache_size)缓存连接(或线程)。它的最大值是 100。当客户端关闭连接时,它会返回到缓存中。当新连接打开时,它会检查线程缓存。在非常繁忙的系统上,打开关闭连接可能会很昂贵,特别是如果您有长时间运行的查询。

    https://dev.mysql.com/doc/refman/5.6/en/connection-threads.html 如果你买得起Mysql Enterprise,你可以使用Mysql 5.6中实现的Thread Pool插件。

    • 2

相关问题

  • 是否有任何 MySQL 基准测试工具?[关闭]

  • 我在哪里可以找到mysql慢日志?

  • 如何优化大型数据库的 mysqldump?

  • 什么时候是使用 MariaDB 而不是 MySQL 的合适时机,为什么?

  • 组如何跟踪数据库架构更改?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何查看 Oracle 中的数据库列表?

    • 8 个回答
  • Marko Smith

    mysql innodb_buffer_pool_size 应该有多大?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    从 .frm 和 .ibd 文件恢复表?

    • 10 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve