我有一个客户需要将旧的vb.net网络应用程序从旧服务器移动到新服务器。当我在新服务器上运行应用程序时,我们发现它运行速度非常慢,即使服务器更新并且硬件更好。
我对应用程序进行了性能分析,而OdbcDataAdapter.Fill()命令是主要的热点。
然后我启用了MySQL中的常规日志并对其进行了修改。我发现该应用程序正在进行大量查询(例如,这个程序员会为搜索中的每个结果执行多个查询),但它们似乎在某个地方受到限制。
以下是单页请求日志的一瞥:
130223 11:21:48 624 Connect root@localhost on mydb
624 Query SET NAMES utf8
624 Query SET character_set_results = NULL
624 Query SET SQL_AUTO_IS_NULL = 0
624 Query set @@sql_select_limit=DEFAULT
624 Query select count(*) from bg_doc_status where uploaded = 1 and candidateid='51233'
624 Quit
130223 11:21:49 625 Connect root@localhost on mydb
625 Query SET NAMES utf8
625 Query SET character_set_results = NULL
625 Query SET SQL_AUTO_IS_NULL = 0
625 Query set @@sql_select_limit=DEFAULT
625 Query select * from bg_doc_status where willfax=1 and candidateid='51233'
625 Quit
130223 11:21:50 626 Connect root@localhost on mydb
626 Query SET NAMES utf8
626 Query SET character_set_results = NULL
626 Query SET SQL_AUTO_IS_NULL = 0
626 Query set @@sql_select_limit=DEFAULT
626 Query Select distinct serviceid from bg_service_results where CandidateID='51233'
626 Quit
130223 11:21:51 627 Connect root@localhost on mydb
627 Query SET NAMES utf8
627 Query SET character_set_results = NULL
627 Query SET SQL_AUTO_IS_NULL = 0
627 Query set @@sql_select_limit=DEFAULT
627 Query Select count(*) from bg_candidates_selected_services where CandidateID='51233'
627 Quit
我们不需要谈论这个编程有多糟糕:)。这家伙可以在一个查询中做很多事情。但是STILL,MySql似乎每秒最多执行一次查询!
如果我在工作台SQL编辑器中运行任何这些查询,它们每个都需要“0.000秒”。如果我尽可能快地按CTRL + ENTER,日志将显示它们每秒执行几次。
有谁知道可能导致每秒1次查询限制的原因是什么?它发生在生产和生产中。
我已尝试使用32位和64位的MySQL ODBC 5.2w驱动程序和MySQL ODBC 5.2a驱动程序。
我找到了解决办法:odbc.open()正在全力以赴。显然是dns查找(对于localhost!)正在花费时间。将我的web.config中的数据库服务器地址更改为127.0.0.1修复它。看起来this person发现了同样的问题。
答案 0 :(得分:2)
我找到了解决办法:odbc.open()正在全力以赴。显然是dns查找(对于localhost!)正在花费时间。将我的web.config中的数据库服务器地址更改为127.0.0.1修复它。看起来this person发现了同样的问题。