请教ThinkPHP为啥会这么容易数据库查询超时

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教ThinkPHP为啥会这么容易数据库查询超时相关的知识,希望对你有一定的参考价值。

参考技术A 这个提示有时候你需要回收一下。 给你几个可能性吧: 首先你做一个调试方法: 做一下异常处理try catch finally 然后解决方案: 1、把conn.close()关一下,或conn.dispose()就行了。 2、dr要记得随时关了。 3

为啥@jdbc 查询因连接超时而失败?

【中文标题】为啥@jdbc 查询因连接超时而失败?【英文标题】:Why @jdbc query fails with connection timeout?为什么@jdbc 查询因连接超时而失败? 【发布时间】:2016-03-07 22:07:09 【问题描述】:

这是我在 DB2 表中插入行的代码:

for(i=0; i<1000000; i++)
    var myData = 
        USERNAME:   "user1",
        SOMEID:     i
    ;
    @JdbcInsert("db2", "MYTABLE", myData);
 

在某些时候它会因为这个错误而失败:

Error while executing JavaScript action expression
Script interpreter error, line=211, col=22: Error while executing function '@JdbcInsert'
Error while creating connection
Time expired getting a connection (=10000 ms). Try again.

我发现没有办法控制 JDBC 驱动程序超时。我错了吗? 或者我应该放类似的东西

java.lang.Thread.sleep(1000);

在每个@JdbcInsert 语句之前?

【问题讨论】:

我认为你可以更改服务器超时时间。 但是,10 秒应该足以创建连接,在大多数情况下应该会快得多。 【参考方案1】:

为什么添加Thread.sleep(1000) 可以解决您的问题?这里的问题是您希望将 1,000,000 条记录插入到 DB2 中,连接超时为 10 秒。

您需要:A) 增加连接超时时间或 B) 一次插入更少的记录(即插入 10k 或 100k 条记录然后获得新连接)

显然 A 听起来是这里最好的解决方案,因为 B 只是增加了获得额外连接的更多开销。

【讨论】:

我没有建立任何连接。只有一个 JavaScript 命令 @Jdbcinsert 可以插入一条记录。它不是纯 Java,您可以控制一切。如果我可以一次插入多条记录,问题将得到解决。但是这个问题仍然悬而未决***.com/questions/23768736/… 对,如果您使用选项 B,您将不得不使用除 @Jdbcinsert 之外的其他机制(即更细粒度的东西,实际上允许您控制连接)【参考方案2】:

.jdbc 文件有超时参数。请参阅 Ext Lib 书 https://books.google.com/books?id=4DIXQKQNoSQC&pg=PA408&lpg=PA408&dq=xpages+jdbc+file+timeout&source=bl&ots=YJXuvWUJf0&sig=1bD_chX0IkEtSPvkfaSfZqJlSvk&hl=en&sa=X&ved=0ahUKEwjsvI7cobHLAhUG92MKHcmNBCUQ6AEILTAD#v=onepage&q=xpages%20jdbc%20file%20timeout&f=false

【讨论】:

以上是关于请教ThinkPHP为啥会这么容易数据库查询超时的主要内容,如果未能解决你的问题,请参考以下文章

mysql数据库链接不稳定,每隔几分钟就会出现链接不上的问题,最大连接数也修改了,还是没用,请教高手!

thinkphp 留言 评论 系统

1010 Radix

为啥没有网络连接时 Alamofire 需要这么长时间才能超时?

sqlserver查询很慢、而且超时为啥?

为啥@jdbc 查询因连接超时而失败?