想升级我们公司里存货系统的SQL服务器,但要老板痛痛快快的掏钱,自然需要一些数据的支持,总不能我说慢或者用户说慢,就直接买吧.
所以想问问大家有没有甚么测试的软件,或者方法,来衡量这台SQL服务器的性能.我现在使用一些耗时的SQL语句,定时执行,得到执行时间,
但感觉应该有更专业的测试方法.谢谢.注:数据量在6000W左右,非软件公司,传统行业的公司.

解决方案 »

  1.   

    To Zoezs:服务器有11台,通过replication保持数据一致的,基本配置CPU4核xron2.33,内存大部分8G,个别16G.用户400个左右.
    To qianjin036a,发到水版这个答案绝对给分.....其实老板的口气是给蛮多钱买服务器的,并非要忽悠老板出钱.主要是有份数据说明
    下更严谨些.
      

  2.   

    汗。这强的服务器,还要换。利用typeperf工具收集SQL Server性能数据
    通常DBA在监控和优化SQL Server数据库DBA,都想利用命令行工具。其中经常要做的一件事情,就是收集服务器性能数据,包括CPU ,内存和磁盘利用率以及SQL Server特定数据。这时你就可以利用TypePerf.exe这个命令行工具来帮你捕获这些性能数据。  TypePerf.exe是一个命令行工具,包括把Windows操作系统的性能计数器数据输出到命令窗口或写入到支持该功能的日志文件格式中。
      Windows操作系统以对象及其相关联的计数器的形式,提供了非常多的性能数据。例如, SQL Server提供了sqlserver统计对象的详细报告,包括了登录、注销、数据库连接等信息; 有些对象摆脱了计数器方式,转化为特定的实例。还是以sqlserver为例:数据库对象详细提供了每一个数据库的数据文件和事务日志文件大小,已使用事务日志的百分比,活动事务等。您可以指定一个单一的数据库或所有数据库结合在一起,作为该实例。
      需要提醒的是,在SQL Server实例有个特殊的含义,即命名实例。
      作为是典型的命令行工具,typeperf也有许多参数供选择,让您根据实际需要进行调整。打开一个命令提示符并输入以下命令:
      typeperf -? 
      您会看到下面的输出:
    用法: 
    typeperf { 
    | -cf <文件名> 
    | -q [object] 
    | -qx [object] 
    } [选项]
    参数:
    要监视的性能计数器。 
    选项:
    -? 显示跟上下文相关的帮助。 
    -f 输出文件格式。默认值是 CSV。 
    -cf <文件名> 含有监视的性能计数器的文件,一个计数器一行。 
    -si <[[hh:]mm:]ss> 示例间的时间。默认值是 1 秒。 
    -o <文件名> 输出文件或 SQL 数据库的路径。默认值为 STDOUT。 
    -q [object] 列出已安装的计数器(无范例)。要列出某个对象的计数器,
    包括对象名,如 Processor。 
    -qx [object] 列出已安装的计数器(带范例)。要列出某个对象的计数器,
    包括对象名,如 Processor。 
    -sc 要收集的示例数量。默认值为,在 CTRL+C 之前都进行采样。 
    -config <文件名> 含有命令选项的设置文件。 
    -s 在计数器路径中没有指定服务器的情况下要监视的服务器。 
    -y 不用提示对所有问题都回答 yes。 
        使用typeperf的最终目标,是采用一种可重复的方式来捕捉性能数据。例如:指定您选择在一个批处理文件,执行特定操作; 默认情况下该命令执行后,性能数据将输出到命令窗口,您也可以使用- f选项指定一个CSV文件(逗号分隔值) , TSV文件(制表符分隔值)将性能数据输出到指定文件中。
      使用typeperf捕捉性能数据之前,我们需要明确哪些性能对象时可用的。采用以下两个选项,您可以获得指定的机器上的性能对象列表:
      -q [object] 列出已安装的计数器(无范例)。 
      -qx [object] 列出已安装的计数器(带范例)。
      在上述两个选项中,[object]是可选的参数,如果指定了该参数,将对对象列表进行过滤。默认是显示当前机器上的性能对象,你可以用-s 来指定其他的机器。
      输入以下命令可以获得SQL Server缓冲管理器对象的所有技术器列表:
      TYPEPERF -q "SQLServer:Buffer Manager" 
      你可以看到类似以下的输出内容:
      \SQLServer:Buffer Manager\Buffer cache hit ratio 
      \SQLServer:Buffer Manager\Page lookups/sec 
      \SQLServer:Buffer Manager\Free list stalls/sec 
      \SQLServer:Buffer Manager\Free pages 
      \SQLServer:Buffer Manager\Total pages 
      \SQLServer:Buffer Manager\Target pages 
      \SQLServer:Buffer Manager\Database pages 
      \SQLServer:Buffer Manager\Reserved pages 
      \SQLServer:Buffer Manager\Stolen pages 
      \SQLServer:Buffer Manager\Lazy writes/sec 
      \SQLServer:Buffer Manager\Readahead pages/sec 
      \SQLServer:Buffer Manager\Page reads/sec 
      \SQLServer:Buffer Manager\Page writes/sec 
      \SQLServer:Buffer Manager\Checkpoint pages/sec 
      \SQLServer:Buffer Manager\AWE lookup maps/sec 
      \SQLServer:Buffer Manager\AWE stolen maps/sec 
      \SQLServer:Buffer Manager\AWE write maps/sec 
      \SQLServer:Buffer Manager\AWE unmap calls/sec 
      \SQLServer:Buffer Manager\AWE unmap pages/sec 
      \SQLServer:Buffer Manager\Page life expectancy 
      输入以下命令可以获得tempdb这个数据库实例所有的计数器列表:
    TYPEPERF -qx "SQLServer:Databases" | FIND "tempdb" 
      你可以看到类似以下的输出内容:
      \SQLServer:Databases(tempdb)\Data File(s) Size (KB) 
      \SQLServer:Databases(tempdb)\Log File(s) Size (KB) 
      \SQLServer:Databases(tempdb)\Log File(s) Used Size (KB) 
      \SQLServer:Databases(tempdb)\Percent Log Used 
      \SQLServer:Databases(tempdb)\Active Transactions 
      \SQLServer:Databases(tempdb)\Transactions/sec 
      \SQLServer:Databases(tempdb)\Repl. Pending Xacts 
      \SQLServer:Databases(tempdb)\Repl. Trans. Rate 
      \SQLServer:Databases(tempdb)\Log Cache Reads/sec 
      \SQLServer:Databases(tempdb)\Log Cache Hit Ratio 
      \SQLServer:Databases(tempdb)\Bulk Copy Rows/sec 
      \SQLServer:Databases(tempdb)\Bulk Copy Throughput/sec 
      \SQLServer:Databases(tempdb)\Backup/Restore Throughput/sec 
      \SQLServer:Databases(tempdb)\DBCC Logical Scan Bytes/sec 
      \SQLServer:Databases(tempdb)\Shrink Data Movement Bytes/sec 
      \SQLServer:Databases(tempdb)\Log Flushes/sec 
      \SQLServer:Databases(tempdb)\Log Bytes Flushed/sec 
      \SQLServer:Databases(tempdb)\Log Flush Waits/sec 
      \SQLServer:Databases(tempdb)\Log Flush Wait Time 
      \SQLServer:Databases(tempdb)\Log Truncations 
      \SQLServer:Databases(tempdb)\Log Growths 
      \SQLServer:Databases(tempdb)\Log Shrinks 
      上面这个实例( - x选项)报告了每个SQL Server数据库所包含的所有的SQLServer:Databases对象(所有与数据库相关联的所有实例)的性能计数器。上面的输出结果,通过FIND管道命令对结果进行过滤,只包含了tempdb数据。
      当您正在使用一个命名的SQL Server实例,性能对象将反映的SQL Server实例的名称。例如我的计算机运行的一个实例的SQL Server 2000 Enterprise Edition的是名为sql2000ee ; 则性能对象就被命名为mssql$sql2000ee,而不是上面所示的sqlserver。
      使用- Q或- qx选项,可以获得性能计数器列表,可以将该列表重定向到一个文本文件(如MyCounters.txt),如果你只想捕获其中几个性能计数器,可以编辑该文件。
      TYPEPERF -qx "SQLServer:Databases" | FIND "tempdb" >>MyCounters.txt 
      本例中我们对MyCounters.txt 文件进行编辑,编辑后的计数器列表如下图所示:
    \SQLServer:Databases(_Total)\DBCC Logical Scan Bytes/sec
    \SQLServer:Databases(tempdb)\Percent Log Used
    \SQLServer:Buffer Manager\Buffer cache hit ratio
    \SQLServer:General Statistics\User Connections
    \SQLServer:Locks(_Total)\Lock Requests/sec
    \SQLServer:SQL Statistics\Batch Requests/sec 
      执行typeperf命令行时,带上- CF<文件名>选项,这样该命令执行时,就将从制定的文本文件中读取计数器列表了。上面这个命令将从MyCounters.txt这个文本文件中读取计数器信息,并显示技术器数值,每隔一秒钟刷新一次。该命令将一直重复执行,直至用户按下了Ctrl+C快捷键。
      TYPEPERF -f CSV -o MyCounters.csv -si 15 -cf MyCounters.txt -sc 60 
      上面这个例子,从MyCounters.txt这个文本文件中读取计数器信息,将技术器数值写入到MyCounter.csv文件中,每隔15秒钟执行一次,共执行60次(15分钟后执行完)。
      

  3.   

    这么强的Server还要换?
    我们过亿的数据才这配置啊。
      

  4.   

    很多人都说我的server配置好,虽然内存8G,但很多都是台式机升级到这么多的,算不上真正意义上的服务器.当然平时应用都没有甚么问题的,只是在月底用户集中做报表的那几天会很慢.当然除了硬件外,SQL语句的写法也是很有讲究的.但那么多程序,不可能再短期内优化,而且我们公司的数据量尽管达不到亿级,但业务比较复杂,很难说全部的查询都很好的利用主键或者索引.做为DBA,当然要争取多些公司资源,让系统跑得更顺畅啦,无论是对自己部门,还是对用户有好处的,而且老板都主动说多买几台高配置的服务器啦.
      

  5.   

    监测CPU使用率和I/O使用率,如果在有较多用户访问时它们比较高,那就可能需要增加服务器.
      

  6.   

    不要对新服务器的期待太高,问题不在你说服不说服你们老板,而是你能否给新服务器对系统的优化空间作出衡量,老板掏了钱系统还是慢你就囧大了。
    优化系统的时候应该优先考虑的横向扩展而不是纵向扩展。横向说白了就是用一堆烂机器搞出优异的性能,而且随时还可以砸烂机器上去,而纵向扩展的指标很难评测。8G不一定比4G快两倍,双核不一定比单核快两倍。而负载均衡是一定2台机器的单台压力等于一台机器的一半。就你的需求来说,耗时的sql语句,在什么机器上都是耗时的,这个是你的系统先天问题,不要指望了。如果情况容许,你倒是可以考虑64位的windows和sqlserver,这样起码内存不会造成瓶颈。
      

  7.   

    好好规划你的8k万数据怎么处理吧,不止delete和select这么简单。分区甚至分服务器,根据系统需求来确定存储方案,这个还比较现实。数据到了这个程度,不能随便什么功能都去轻易支持。甚至,必要的时候可以不用sqlserver用更强的db系统。
      

  8.   

    jinjazz ,说的很有道理的,谢谢你的建议,目前我在新服务器没有买来之前,也是朝着这个方向走的.已经升级了1/3到64bit的sql2008了,也研究了怎么分服务器存储数据.去年也已经买了一台16G的服务器,性能当然提升了不少,用户用的都好开心,但我也认为这些服务器足够用啦,只是我们没有利用充分,或者是那些10年来修修改改的程序实在是谈不上甚么最优算法,种种原因造成的吧,不能说那些程序不好,人站在现在去回顾历史总是会觉得原来走了弯路,正常现象..这次我还是尽量争取公司的资源,另一方面,也研究如何规划数据,优化服务器性能,这个靠我去埋头去研究了,经验还不是很足,也希望大家给指点些方法,如果太明细的不方便说,只说个大概方向也行.分不够,加!!
      

  9.   

    我目前也在研究这个问题,能否通过软件来量化SQL SERVER 服务器的性能。