我有一个客户需要将旧的 vb.net Web 应用程序从旧服务器移到新服务器。当我让应用程序在新服务器上运行时,我们注意到它运行非常缓慢,尽管服务器更新且硬件更好。
我对应用程序进行了性能分析,主要热点是 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
我们不需要谈论这个编程有多糟糕:)。这个人可以在一个查询中做很多事情。但是,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 修复了它。看起来这个人发现了同样的问题。