在 MySQL 中打开和关闭数据库连接(对于 Web 应用程序)的 CPU 密集程度如何
我是许多不同客户使用的软件即服务应用程序的高级开发人员。我们的软件在由 MySQL 后端提供支持的 Apache / PHP 应用程序服务器集群上运行。在该软件的一个特定实例上,当客户的类别超过 29 个时,查询类别名称列表的 PHP 代码会超时。我知道这毫无意义;数字 30 没有什么特别之处会打破这一点,其他客户的类别超过 30 个,但是,当这个安装有 30 个或更多类别时,问题是 100% 可重现的,而当类别少于 30 个时,问题就会消失。
有问题的表是:
CREATE TABLE IF NOT EXISTS `categories` (
`id` int(10) unsigned NOT NULL auto_increment,
`name` varchar(64) NOT NULL,
`title` varchar(128) NOT NULL,
`parent` int(10) unsigned NOT NULL,
`keywords` varchar(255) NOT NULL,
`description` text NOT NULL,
`status` enum('Active','Inactive','_Deleted','_New') NOT NULL default 'Active',
`style` enum('_Unknown') default NULL COMMENT 'Autoenum;',
`order` smallint(5) unsigned NOT NULL,
`created_at` datetime NOT …Run Code Online (Sandbox Code Playgroud) 我正在使用 MATLAB 为数据库提供数据,但过了一段时间后出现too many connections错误。我总是成对使用 opendb 和 closedb 。是要禁食吗?插入一行后是否需要等待?
Connecting to host = localhost user = root password = ***
Uptime: 1591 Threads: 149 Questions: 2956294 Slow queries: 0 Opens: 196391 Flush tables: 1 Open tables: 81 Queries per second avg: 1858.135
Current database is "forwind"
Connection closed, current status:
No connections open
add row
Connecting to host = localhost user = root password = ****
Uptime: 1591 Threads: 150 Questions: 2956402 Slow queries: 0 Opens: 196491 Flush …Run Code Online (Sandbox Code Playgroud) 我们对我们的 PHP/MySQL 站点感到烦恼,因为它似乎从数据库缓存数据,而我们的 PHP 页面显示过时的记录。事实上,有些页面链接到已从数据库中完全删除的 URL,但它们不显示更新的记录,甚至不显示丢失的数据。
如果我们有耐心等待几个(未定义)小时,数据最终会显示出来。我已经通过 PHP 在所有页面上添加了常规的无缓存标头,但它似乎不会影响 MySQL 输出。
网站的 PHP 部分可以立即更新,并立即显示 HTML 等更改。有没有办法强制 MySQL 只从其查询中提取新数据?我认为这就是它的工作方式!
谢谢,克里斯
PS这是我用来尝试强制无缓存情况的php代码:
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // Always modified
header("Cache-Control: private, no-store, no-cache, must-revalidate"); // HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache"); // HTTP/1.0
Run Code Online (Sandbox Code Playgroud)