WMI查询语句 “SELECT * FROM Win32_ComputerSystem” 是一个看起来很简单的查询,主要用于获取Windows 系统的一些信息,如机器名、处理器数量等。在我们的产品上这个语句使用很久了,一直没问题。最近有个客户报产品在获取数据时,偶尔出现获取不到数据的情况,导致在个别图表上出现空白。经过定位,发现的获取语句“SELECT * FROM Win32_ComputerSystem”的查询结果时,好像一直在遍历着什么东西,可能跟这个查询有关,但这个查询我们在本地已经测试过很多次,每次查询都可以很快返回结果的,而且也没有客户报过有关这个查询的问题。
不过我们还是要验证一下,就让客户在他们的环境上通过wbemtest运行一下“SELECT * FROM Win32_ComputerSystem”,结果发现需要等一两分钟才有结果返回,由此我们断定,在客户环境上,这个查询存在性能问题,可能在获取某些东西的时候需要比较多的时间。
由于我们只需要在这个语句上查询处理器数量,我们在客户环境上,试着运行“SELECT NumberOfProcessors FROM Win32_ComputerSystem”, 这回很快就可以返回结果了。那到底是什么东西在导致那个模糊查询存在性能问题呢?
不过我们还是要验证一下,就让客户在他们的环境上通过wbemtest运行一下“SELECT * FROM Win32_ComputerSystem”,结果发现需要等一两分钟才有结果返回,由此我们断定,在客户环境上,这个查询存在性能问题,可能在获取某些东西的时候需要比较多的时间。
由于我们只需要在这个语句上查询处理器数量,我们在客户环境上,试着运行“SELECT NumberOfProcessors FROM Win32_ComputerSystem”, 这回很快就可以返回结果了。那到底是什么东西在导致那个模糊查询存在性能问题呢?
接着我们检查客户环境,当我们点击“我的电脑->属性”时,发现在弹出窗口有一个定制的图标,平时在我们电脑上是没有看到这个图标的,由于客户的操作系统是跟微软定制,加入了自己公司的logo在里面,这就有点类似我们以前的雨木林风之类的XP系统,在“我的电脑->属性”可以看到这方面的图标,查询了微软的文档ht