我正在工作的一个系统,有一个思科负载均衡器,可以处理40K请求。
有两个应用服务器。大约有12个web服务。
还有一个具有2TB数据的SQL服务器。
这里的瓶颈是SQL server,它位于一台带有Quad和80 GB内存的单机上。
有大约250万项存储在数据库中。
查询的类型是,选择一些没有索引的属性的产品。
有一个庞大的索引,我们不想索引所有的东西,因为索引碎片正在真正损害性能。
我考虑过缓存、分布式缓存,但是有些查询不太方便缓存,比如给我一些以foo开头的公司。那里有一个巨大的组合。
你将如何处理这个问题?
有比插入更多的选择。主要是选择。有几个小的选择。还有一些连接有3个表。
发布于 2013-03-15 13:31:11
对于250万项,我希望您的索引会相当大。特别是当您在大型字段上索引时。同样,如果您的主键很大,这也无助于FYI。任何非聚集索引都包含主键(假设这是您的聚集索引),而不管是否包含它。它必须作为对表的参考。
因此,如果您有一个大的主键(并且只有当您有一个大的主键时),您可能会考虑创建一个标识列并将其更改为您的群集主键。可以将现有的主键保留为非聚集的唯一索引。此外,如果您担心索引碎片,请重新构建/重新组织它。它是SQL 2008及更高版本中ALTER命令的一部分。你甚至可以在网上做。
我对您的建议是添加所需的索引(在合理的范围内)。一般来说,3或4个非聚集索引不会影响性能。老实说,如果你真的需要的话,你大概可以在没有问题的情况下逃脱10次左右。测试您的系统,因为里程可能有所不同。就我个人而言,我将确保您也有一个聚集索引。还添加某种类型的维护作业来执行索引重新构建/重新组织。其中有一些甚至会检查您当前的碎片,并根据需要智能地重新构建或重新组织。
发布于 2013-03-15 14:44:16
发布DMV查询的时间:
http://sqlserverperformance.wordpress.com/2011/01/06/sql-server-index-tuning-for-mere-mortals/
它可能会建议您删除几个索引并添加一些索引。
只需确保您编写了可能删除的任何索引。因为如果你放下它,第二天有人会说“这个特定的功能不再正常工作了”,...be已经准备好了。
这是最快的方法。
更长的路也是:
这就是我和worked..operate在一起的最好的DBA。他们不等待“报告”,他们只是不断地冲洗和重复,直到没有什么可以冲洗和重复。
全部披露。我不是dba。但我不得不在电视上播放一次。
发布于 2016-08-01 15:53:22
我有一些想法,希望它们有用。
您的索引似乎需要一些工作。首先,碎片化将花费很长时间来整理一个25+百万行表,因此使用一个脚本,该脚本只重建高度支离破碎的索引(internet上有几个)--接下来,如果索引列太宽,请考虑使用多个索引并使用索引联接。(在部署到现场之前,我会在非生产环境中测试这个问题)
接下来,检查您的存储过程,尽可能多地查找索引,并确保where和join子句是以使用索引和防止索引或表扫描的方式编写的。还避免在where列中选择*或使用函数,并尝试返回最小数据量
最后,80 gb将超出Server的标准或bi版本(相信它们是64 gb)。因此,除非您有企业版,否则将最大内存和最小内存设置为64 to )。
希望这能帮上忙
https://dba.stackexchange.com/questions/36765
复制相似问题