当前位置: 主页 > 数据库

mysql 数据库连接数-一级片极品美女图数剧库

发布时间:2023-02-13 07:03   浏览次数:次   作者:佚名

用户数据库名称最近已超过网站上出现的“max_user_connections”

主动连接错误,网站瘫痪。 有必要研究这个问题。

max_user_connections是MySQL用户连接数的最大设置,整条语句的意思是:服务器的MySQL

最大连接数参数设置不够。解决方法:修改MySQL安装目录下的my.ini或my.cnf文件

max_user_connections 参数的值重新启动 MySQL 服务器。

但通常情况下,MySQL 默认的 100 个连接就足够了。 我们需要从程序上考虑。 MySQL 默认的最大连接数是 100(N)。 事实上,普通用户只有N-1个连接。 为超级管理员预留一个连接,防止管理员在连接满时被踢出。 当很多网站运行时,连接数会受到限制。 我觉得十有八九不是因为网站实际访问量太大导致连接数超限。 更多的是因为我们在设计网站程序时采用了不合理的方法。 由设计架构或数据结构引起。 异常连接超限可能原因如下(天元实时汇总可能不完整或无误,仅供参考):

当主程序数据库属于同一数据空间时,很可能会出现人数、在线时间、浏览次数等统计功能。

复杂的动态页面也容易出现,尤其是用户每次浏览多个数据库或多个表时。

另外,程序设计不合理(例如复杂的计算、等待等操作放在数据库交互中间),或者程序存在发布bug。

电脑硬件配置太低,但安装了版本太高、配置太高的MySQL。

没有使用缓存技术。

一级片极品美女图数剧库_mysql库密码_mysql 数据库连接数

数据库未优化或表设计极其复杂。

由于某些原因,数据库的数据交互时间会延长或者交互次数会增加。 所以遇到这种问题,首先要考虑是不是程序有bug导致连接释放失败,然后再考虑软硬件优化。 当然,修改MySQL连接数也是软件优化的操作方法之一。 希望大家可以抱着学习的态度,研究自己的原因,解决这个问题。 如果实在找不到原因,那只能先修改连接数,再推迟定位真正原因。

关于PHP的数据库持久连接mysql_pconnect

PHP程序员应该知道可以使用mysql_pconnect(永久连接)函数连接到MySQL数据库。 使用与数据库的永久连接可以提高效率,但是在实际应用中,与数据库的永久连接往往会导致一些问题。 经常断断续续的出现数据库连接不上,类似“Too

许多连接在

...”的错误信息,再次重启服务器就正常了,但是过了一段时间,又出现同样的故障。恐怕不是每个人都能解释清楚这些问题的原因,虽然PHP文档中有一些相关资料,不过解释起来不是很容易理解,这里我试着和脸蛋做个简单的讨论,以上观点不全对,欢迎反馈。

首先看一下数据库永久连接的定义:数据库永久连接是脚本运行结束时还没有关闭的连接。 收到持久连接请求时。 PHP

将检查是否已经存在(先前打开的)相同的持久连接。 如果存在,则直接使用该连接; 如果没有,将建立一个新的连接。 所谓“相同”连接是指使用相同的用户名和密码连接到同一台主机。

PHP要使用永久连接来操作MySQL是有一个前提条件的:即PHP必须作为多线程或多进程Web服务器的插件或模块安装。 最常见的形式是使用 PHP 作为多进程 Apache 服务器的一个模块。 对于多进程服务器,其典型特征是有一个父进程和一组子进程协同运行,由子进程实际生成Web页面。 每当客户端向父进程发出请求时,该请求被传递给尚未被其他客户端请求占用的子进程。 这意味着当同一个客户端第二次向服务器发出请求时,可能会被不同的子进程处理。打开永久连接后,所有后续向不同子进程请求SQL服务的页面都可以重用已建立的

SQL 服务器连接。 它使得每个子进程在其生命周期中只做一次连接操作,而不是每次处理一个页面都询问SQL

服务器发出连接请求。 每个子进程都会与服务器建立自己独立的永久连接。 PHP本身没有数据库连接池的概念,但是Apache有进程池的概念,

一级片极品美女图数剧库_mysql库密码_mysql 数据库连接数

一个Apache子进程结束后,会被放回进程池中,

这也使得用mysql_pconnect打开的mysql连接资源并没有被释放,而是依附在对应的Apache子进程中保存在进程池中。 然后它可以在下一个连接请求中重用。 一切看似正常,但是当Apache并发访问很多时,如果使用mysql_pconnect,之前Apache子进程占用的MySQL连接不会关闭,

快速让MySQL达到最大连接数,以免后面的请求得不到响应。

上面的部分文字摘自PHP文档,理解起来可能显得有些生涩,我再举个大白话的例子来说明问题:

假设Apache配置的最大连接数为1000,MySQL配置的最大连接数为100,当Apache服务器收到200个并发访问时,其中100个涉及数据库访问,其余100个不涉及数据库访问mysql 数据库连接数,因为此时还没有可用的数据库连接,所以100个并发数据库访问会同时产生100个永久数据库连接,达到最大数据库连接数。 当这些操作没有完成时,任何其他连接都不能再获取数据库连接。 当这些操作结束后,相应的连接就会被放入进程池中。 此时Apache进程池中有200个空闲子进程,其中100个连接到数据库。 因为Apache会随机挑选空闲的子进程进行访问请求,所以你拿到的子进程很可能是100个不包含数据库连接的子进程之一,而且数据库连接已经达到最大值,无法成功创建新的数据库连接,唉,还得不停刷新页面。 运气好的时候,正好分配给了一个有数据库连接的子进程,就可以正常浏览页面了。 如果是一个访问量很大的网站,可能随时都有很大的并发量,所以浏览者可能会不断的发现连接不上数据库。

也许你会说,我们能不能把Apache和MySQL的最大连接数调成一样呢? 是的,合理调整最大连接数会在一定程度上避免这个问题,但是Apache和MySQL的负载能力是不一样的。 如果根据Apache的负载能力来设置,对于MySQL来说mysql 数据库连接数,最大连接数如果过大,则会对MySQL数据库产生大量的永久连接。 比如平时养活几百万大军。 最大连接数太小,感觉有点大材小用,不能最大化Apache的效率。

因此,根据PHP手册中的介绍,只适合在并发访问量小的网站上使用永久数据库连接,但是对于并发访问量小的网站来说,使用永久数据库连接带来的效率提升似乎并不明显much sense ,从这个角度来说,我觉得PHP中的数据库永久连接基本是个鸡肋角色。 如果一定要用到数据库连接池的概念,可以试试sqlrelay或者Apache自己提供的mod_dbd,说不定会有惊喜。

关于 mysql_free_result 和 mysql_close

以前用mysql的时候都是用短链接。 调用mysql_store_result获取一次数据后,我直接调用了:

1个

mysql_free_result(m_result);

mysql库密码_mysql 数据库连接数_一级片极品美女图数剧库

2个

mysql_close(m_Database);

但是有两个问题:

使用长连接时(即connect后永不close),如果最后会调用mysql_close,是否需要每次都调用mysql_free_result?

调用mysql_close后m_result的数据是否还可用。

先说结论:

每次都必须调用。 因为经过测试,每次mysql_store_result的指针都不一样,所以可以看出,并没有共享buf的同一块。

还是可以用的。 valgrind扫描后,只调用mysql_close的扫描结果为:

1个

==9397== 1个块中的16,468(88个直接,16,380个间接)字节是

绝对输在损失记录中 4 of 5

一级片极品美女图数剧库_mysql库密码_mysql 数据库连接数

2个

==9397==在

0x40219B3: malloc (vg_replace_malloc.c:195)

3个

==9397==由

0x8053EA2:my_malloc(在

/data/home/dantezhu/appbase/application/platform/openqqcom/share/db_openright/test/test)

4个

==9397==由

0x806D314:mysql_store_result(在

/data/home/dantezhu/appbase/application/platform/openqqcom/share/db_openright/test/test)

mysql库密码_一级片极品美女图数剧库_mysql 数据库连接数

5个

==9397==由

0x804BB04:CMySQLCppClient::结果(st_mysql_res*&)

(mysql_cpp_client.cpp:127)

6个

==9397==由

0x804AB58: CDBOpenRight::GetUinsByApp(unsigned int, std::set,

std::allocator >&) (db_openright.cpp:58)

7

==9397==由

0x8049F10: 主要 (test.cpp:27)

我稍后会研究它。 .