SQL Server 2008性能问题

时间:2009-11-24 23:07:22

标签: sql sql-server performance sql-server-2008

我有一个包含30列和约340万条记录的表格。 SELECT * FROM [Table]; 是否合理需要8到12分钟才能返回所有340万个结果?

如果没有,哪里是开始诊断我的问题的好地方/资源?

7 个答案:

答案 0 :(得分:7)

是的,是合理的。对于一个精确调谐和运行最佳的系统,可以在大约12分钟内提供3.4密耳的行,这正是预期的结果......

尽管如此,还有一些地方需要提高性能:

  • 表格是否适合缓冲池? IE浏览器。你有足够的RAM存储整个数据库吗?如果不是,那么你将要为磁盘命中IO。 Page life expectancy计数器是一个很好的指标。
  • 您的磁盘I / O子系统有多快?我们是在谈论5000 RPM的二手IDE驱动器还是RamSAN-500? sqliosim报告的吞吐量是多少?怎么样的穿孔计数器,平均。磁盘队列长度,平均磁盘秒/物理磁盘上的传输? Reads与Writes有什么不同?
  • 桌子有多碎片?扫描性能首先受到预读效率的影响,预读大小由hobt片段大小决定。也许您需要优化表格的ETL,遵循FastTrack方法。
  • 任何争论都在发生?你有没有测量锁定等待时间?也许snasphot隔离可以缓解这个问题。
  • 客户端能否及时收到3.4密耳的行?服务器上的服务器是否阻止可用性?同样,等待统计数据可以表明这一点。

另一个好的开始是遵循Wait and Queues方法。

答案 1 :(得分:3)

SQL服务器最有可能尽力获取您要求的数据。 假设30列至少1K /记录是不合理的。 3.4M x 1K = 3.4Gb。

从磁盘读取3.4Gb可能需要几分钟才能完成(不要忘记这不仅仅是读取,显然还有一些SQL处理开销。

但当然在现实世界的场景中,您不想检索所有数据......

答案 2 :(得分:2)

开始诊断问题的最佳位置是确定您是否有问题。设置一个特定的,可衡量的,面向业务的绩效目标,并准确定义您认为返回数据的合理时间。

如果您的答案是8-12分钟,那么您没有问题,这总是一件好事。

如果你的答案少于那个,那么你现在知道你有问题,问题有多大(如果你说5分钟那么它可能不是一个大问题,如果你说10秒那么它是一个更大的问题)。在这种情况下,您可能希望开始查看数据库性能计数器,以查看它是否有CPU / IO /内存/网络瓶颈,并查看查询的执行计划以查看是否可以通过索引改进(虽然这不太可能是SELECT *)。

答案 3 :(得分:0)

可以询问有关磁盘IO,列大小和其他设置相关内容的问题。除非您使用非常慢的磁盘和慢速网络,否则它不应该花费12分钟。

首先要看的是执​​行计划。这可以让您了解SQL Server如何处理事情。

我想问一些事情可以更好地排除故障吗?有主键吗?它是聚集的吗?是否有订单?

答案 4 :(得分:0)

评估系统实际运行的查询可能会更有趣。 SQL Server附带的Profiler工具可以记录您的系统正在运行的所有查询。让它运行一段时间(假设你有足够的额外磁盘空间),它将记录正在运行的查询和给定的参数。它还会告诉你他们执行的时间有多长。

查看此信息并确定哪些查询耗尽了CPU时间将帮助您确定性能调优的位置 - 例如,如果查询A需要60秒才能运行,并且每天只运行一次,则可能对该特定应用程序产生重大影响,但调整一个查询不会使您的SQL Server更快。但是如果查询B需要2秒钟才能运行并且每天运行4000次,那么调整它可能会产生更大的整体影响。

通常添加相关索引和性能调优您的“大犯”查询可以对性​​能产生非常严重的积极影响。探查者向您展示这些查询的人可能会让您感到惊讶。

答案 5 :(得分:0)

与什么相比合理?

  1. 行数有多宽?
  2. 你的CPU有多快?
  3. 你有多少内存?
  4. 启动查询时表是否已在RAM中?
  5. 您是通过网络提供结果吗?如果是这样,它有多快?
  6. 检索行的客户端有多快?
  7. 您的磁盘有多快?
  8. 桌子有多碎片?
  9. 数据库机器是否同时执行其他任何操作?

答案 6 :(得分:0)

我同意你的意见,我只是在不到3分钟的时间内从SQL 2008服务器上带回了2000万行数据 - 硬件成本低于SQL许可证。

除非您的硬件/网络真的很糟糕,否则可以在某处获得性能提升。