我有一个包含30列和约340万条记录的表格。 SELECT * FROM [Table]; 是否合理需要8到12分钟才能返回所有340万个结果?
如果没有,哪里是开始诊断我的问题的好地方/资源?
答案 0 :(得分:7)
是的,是合理的。对于一个精确调谐和运行最佳的系统,可以在大约12分钟内提供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)
与什么相比合理?
答案 6 :(得分:0)
我同意你的意见,我只是在不到3分钟的时间内从SQL 2008服务器上带回了2000万行数据 - 硬件成本低于SQL许可证。
除非您的硬件/网络真的很糟糕,否则可以在某处获得性能提升。