2017-02-24 104 views
0

我有建立在Codeigniter(PHP 5.5 - MYSQLi 5.6)上的Rest api。 针对单个Api调用触发8个查询。调用其他API时连接数增加,连接数不会减少。Mysql连接正在迅速增加,包括查询

对于4个用户,查询和连接增加到25-32。我不知道如何减少连接&查询。

  • 我有这样的情景 - MY_MODEL延伸CI_MODEL和USER_DB延伸MY_MODEL和USER_MODEL extedning的USER_DB。我怀疑构造函数链中有任何问题。请建议

    1. 连接&查询正在迅速增加。
    2. 已使用Config文件中的永久连接无用。
    3. 如何减少mysqli连接&查询被触发。
    4. 我是否必须在每次api呼叫后强行关闭连接,还是应该将它留给Codeigniter。

    enter image description here

+0

刚刚摆脱pconnect –

回答

0

pconnect是真的在你的情况,那就是你的设置是使用的持久连接。在这种情况下,无论何时创建新连接,连接数都会增加。在这种情况下,您需要关闭连接。你也可以将pconnect设置为false,但是在你做之前你需要考虑它。在某些情况下,您可能需要持续连接。在这里看到:

Advantages/Disadvantages of pconnect option in CodeIgniter

+0

让我检查和恢复这一点。我会按照建议尝试一下这个封闭的场景。我可以关闭类的析构函数中的连接吗? – Sabarish

+0

你根本不明白什么是持久连接 –

+0

@Sabarish哪个类的析构函数?你能告诉我它的名字并简要描述它吗? –

-1

如果你运行你的裸阿帕奇PHP的,你这样做是错误的。

鉴于许多小型查询的典型Web工作负载,数据库将处于最佳状态,每个内核有1-2个线程。如果你让它增长到10或更多,首先它会消耗更多的内存,然后你将需要担心更多的锁定。

由于类似的原因,您的web服务器将会变得更加灵活,每个核心有1-3个PHP进程,而不是几百个。

设置一个简单的方法是使用lighttpd或nginx等服务器以fastcgi模式运行php。这些服务器将处理长时间缓慢的HTTP连接,收集请求数据,然后快速运行PHP代码,缓冲响应,并释放php解释器和数据库连接,同时通过客户端的HTTP连接缓冲响应。

然后,您可以将lighttpd配置中fastcgi进程的数量设置为小一点,例如每个核心3个。这也限制了你持久的数据库连接。

当然,你应该优化你的SQL查询!但既然你不给任何有关的信息...

+0

我会将服务器更改为lighttpd或nginx作为所需服务器。在析构函数中关闭连接是一个好习惯。请建议。 – Sabarish

+1

既然你要使用持久连接,我相信这是不需要的。 – peufeu

+0

我为数据库做了一个singleton类,并且连接数急剧减少,并且我在My_model构造函数处连接到数据库,移动到一个sigleton函数,现在对于1000个用户,只有16个连接被创建。谢谢你们,真的很感谢你的回应。 – Sabarish