DB Query Analyzer 中断SQL语句的执行
马根峰
( 广东联合电子收费股份有限公司, 广州 510300)
摘要: 万能数据库查询分析器有两个版本:DB 查询分析器(中文版本)和 DB Query Analyzer(英文版本)。它不仅能够直接获取SQL语句执行的时间,而且能够真正中断非常耗时的SQL语句的执行,从前台界面或者从后台操作系统都可以验证到SQL语句被中断,而不会在数据库服务器主机产生僵尸进程。这些优点是绝大部分数据库自带的客户端工具所不具备的,文章以英文版本 DB Query Analyzer 连接Windows2000 Server操作系统的MYSQL数据库为例,来展现整个中断处理过程。
关键词: DB Query Analyzer;MYSQL;SQL语句;数据库
中图法分类号: TP392 文献标识码: A 文章编号:1006-8228(2011)12-35-02
DB Query Analyzer to cancel a Running SQL statement
MA Gen-feng
( Guangdong Unitoll Collection Incorporated, GuangZhou,Guangdong 510300, China)
Abstract:DB Query Analyzer has two version: simplified Chinese edition and English edition. It can not only get known the running time of SQL statement directory,but alse cancel a running and very time-consuming SQL statement indeed, which can be verified on foreground interface or background operation system, and it does not cause zombie processes in database server. Most database don't provie the above functions in their client tools. Taking DB Query Analyzer connected to MySQL database based on Windows2000 Server as an example,the whole process of canceling a running SQL statement is illustrated.
Key words: DB Query Analyzer;MYSQL;SQL statement;database
0 引言
从事大型数据库查询、数据分析工作的人经常遇到这样的情况,自己编写的SQL语句充分使用了索引,并且经过了优化,但由于数据表太大,访问数据库也非常耗时。而大部分DBMS,包括大型数据库系统Oracle、Sybase、DB2等其客户端工具都不显示SQL执行了多少时间。
中国本土程序员马根峰推出的个人作品----万能数据库查询分析器,其中文版本DB 查询分析器、英文版本DB Query Analyzer,具有强大的功能、友好的操作界面、良好的操作性、跨越数据库平台。在《程序员》2007第2期的“新产品&工具点评”部分,该期只点评了5个工具,分别是“Adobe Acrobat 8 中文版”、“迅雷搜索 1.7 新版上线”、“Google 桌面搜索 5.0 中文发布”、“BEA 发布 WebLogic SIP Server 3.0”和特别推荐“万能数据库查询分析器”发布。前面4个都是国内外大型软件公司的产品,只有“万能数据库查询分析器”是个人创作的软件。截止到目前,在国内最著名的软件下载网站“中关村在线”中下载量近九万次,位居整个数据库类排行谤中前20位。在世界范围内,从功能上也仅有国外的Query Tool可以与万能数据库查询分析器比肩,万能数据库查询分析器无疑当属国内第一查询分析器。
万能数据库查询分析器的使用者不仅可以直接在的状态栏上看到SQL语句的执行时间,而且随时可以中断SQL语句的执行,在数据库服务器主机上通过DBMS提供的命令还可以清楚地看到万能数据库查询分析器进程状态变化(MYSQL而言,状态由“Copying to tmp table”变为“ ”)。而不是像某些数据库客户端工具那样,需要从前台关闭程序,然后再从后台操作系统Kill掉还在运行的僵尸进程。因此,能够中断已经向DBMS提交的SQL语句的执行,是成熟的DBMS客户端工具必须具备的功能。
下面以Windows2000 Server操作系统上安装的MYSQL数据库为例,从前台 DB Query Analyzer、后台MYSQL层面向大家详细说明 DB Query Analyzer 如何中断SQL语句的执行。
1 DB Query Analyzer 连接数据库
以用户mgf连接上ODBC数据源mysql_mgf后, DB Query Analyzer 会打开一个命令窗口,输入一条非常耗时的SQL语句如图1所示。
图1 DB Query Analyzer连接上数据库后,在打开的一个窗口中,输入SQL语句
图2 DB Query Analyzer连接上数据库后,查看后台,看到ID为3的进程
通过图2,可以清楚地看到,在打开 DB Query Analyzer 连接上数据源mysql_mgf之前,在MYSQL命令行窗口用“show processlist”命令找不到以用户“mgf”登录的ID为3的DBQueryAnalyzer.exe后台进程。
在 DB Query Analyzer 连接上数据源mysql_mgf之后,再执行“show processlist”命令如箭头①所示,就可以看到如箭头②ID为3的进程了,表明它已经连接到数据库了,其状态为“ ”。
2 DB Query Analyzer 执行SQL语句
在 DB Query Analyzer 中点击“运行”按钮或者按下F5功能键就会向DBMS提交SQL语句。在MYSQL命令行窗口我们依然用 “show processlist” 命令来查看ID为3进程的状态,如图3所示:
图3 执行SQL语句过程中查看后台进程状态
通过图3,可以清看到, DBQueryAnalyzer.exe的ID为3的后台进程状态为“Copying to tmp table”(如箭头①所示)。箭头②所示还是连接上数据库时ID为3的后台进程状态为“ ”。
3 DB Query Analyzer 中断SQL语句的执行
在 DB Query Analyzer 菜单“Query”中选择“Stop”或者点击工具栏中的“Cancel”按钮,《DB Query Analyzer》中会看到“Query Canceled”的提示。如图4所示:
图4 点击DB Query Analyzer中“中断”按钮,SQL语句执行被中断
图5中,在MYSQL命令行窗口我们依然用“show processlist” 命令来查看ID为3的后台进程状态从“Copying to tmp table”变为“ ”,中断操作并没有产生任何僵尸时程,如箭头①所示。
图5 中断SQL语句执行后,DB Query Analyzer.exe的ID为3的后台进程状态为“ ”
4 DB Query Analyzer 退出后
DB Query Analyzer 退出后,MYSQL命令行窗口执行命令“show processlist”,已经找不到DBQueryAnalyzer.exe后台ID为3的进程,没有产生任何僵尸时程。如图6所示:
图6 退出DB Query Analyzer后,查看后台,ID为3的进程结束
5 结束语
在数据库维护、管理、查询的时候,经常会遇到一些SQL语句的执行非常耗时,即使你对查询进行了优化并且充分使用了索引。因此常常需要中断SQL语句的执行。能否中断SQL语句的执行是成熟的数据库客户端工具必须具备的功能。跨越数据库平台的 DB Query Analyzer 完全实现这一功能,从后台数据库服务器上可以看到中断SQL语句的执行所带来的进程状态的变化,并且在后台数据库服务器上不会产生任何僵尸进程。
参考文献:
[1] 马根峰 · 万能数据库查询分析器中的事务管理在Oracle中的应用[M]· 上海:微型电脑应用2008.4
[2] 新产品&工具点评 特别推荐:“万能数据库查询分析器”发布 · 程序员,2007.2
[3] 马根峰 · DB Query Analyzer中的事务管理在DB2中的应用[M]· 北京:电脑编程技巧与维护2011.22
[4] 马根峰 · 《DB 查询分析器》批量执行DML语句并返回更详细的信息[M]· 北京:电脑编程技巧与维护2011.24
[5] 张龙祥,黄正端,陶影 · 数据库原理与设计[M] · 成都:西南交通大学出版社,1995
本文收录于<<计算机时代>>2011年第12期