我从来没有真正理解这两个索引之间的区别,有人可以解释一下有什么不同(性能方面,如何在db中存储索引结构,存储方式等)?
我理解这个问题很广泛,请耐心等待.我真的不知道如何限制它.也许如果你们开始解释你的诀窍,我会得到正确方向的指示,使我能够使问题更加狭窄?
包含的索引
CREATE NONCLUSTERED INDEX IX_Address_PostalCode
ON Person.Address (PostalCode)
INCLUDE (AddressLine1, AddressLine2, City, StateProvinceID);
Run Code Online (Sandbox Code Playgroud)
'正常'指数
CREATE NONCLUSTERED INDEX IX_Address_PostalCode
ON Person.Address (PostalCode, AddressLine1, AddressLine2, City, StateProvinceID);
Run Code Online (Sandbox Code Playgroud) sql t-sql sql-server sql-server-performance database-indexes
我们有一个SQL服务器,有大约40个不同的(每个约1-5GB)数据库.该服务器是一个8核2.3G CPU,32G的RAM.27Gig固定到SQL Server.CPU使用率总是接近100%,内存消耗约为95%.这里的问题是CPU经常接近100%,并试图了解原因.
我已经运行了初步检查,看看哪个数据库通过使用 - 这个脚本有助于高CPU,但我无法详细说明真正消耗CPU的数据.最高查询(来自所有数据库)只需要大约4秒钟即可完成.IO也不是瓶颈.
记忆会成为罪魁祸首吗?我检查了内存分裂,OBJECT CACHE占用了大约80%的内存分配(27G)到SQL Server.如果涉及到很多SP,我希望这是正常的.运行探查器,我看到很多的重新编译,但主要是由于"临时表改变","延迟编译"等,并是不明确的,如果这些重新编译是计划的结果是越来越抛出缓存因内存压力
欣赏任何想法.
我非常精通SQL服务器性能,但我不得不争辩说GUID应该被用作Clusterd主键的默认类型.
假设该表每天的插入量相当少(5000 +/-行/天),我们会遇到什么样的性能问题?页面拆分将如何影响我们的搜索性能?我应该多久重新索引一次(或者我应该整理碎片)?我应该将填充因子设置为(100,90,80等)?
如果我每天插入1,000,000行怎么办?
我为所有问题道歉,但我希望得到一些备份,因为不使用GUID作为PK的默认值.然而,我完全愿意通过StackOverflow用户群的过度知识改变我的想法.
我注意到一个有趣的性能变化,大约有150万个输入值.有人能给我一个很好的解释,为什么会这样?
表非常简单.它由(bigint,bigint,bigint,bool,varbinary(max))组成.我在前三个bigint上有一个pk clusered索引.我只插入布尔"true"作为数据varbinary(max).
从那时起,表现似乎非常稳定.
图例:Y(以毫秒为单位)| X(插入10K)

我也很好奇我在图上有不断的相对较小(有时非常大)的峰值.
来自尖峰之前的实际执行计划.

图例:
我插入的表:TSMDataTable
1. BigInt DataNodeID - fk
2. BigInt TS - 主
时间戳3.BigInt CTS - 修改时间戳
4.位:ICT - 保留最后插入值的记录(提高读取性能)
5.数据: Data
Bool值当前时间戳保持不变
环境
它是本地的.
它不共享任何资源.
它是固定大小的数据库(足以使它不扩展).
(电脑,4核,8GB,7200rps,Win 7).
(Sql Server 2008 R2 DC,处理器亲和力(核心1,2),3GB,)
sql-server performance-testing sql-server-2008 sql-server-2008-r2 sql-server-performance
虽然一对夫妇的问题在已经发布的SO约之间的区别Over Partition By和Group By,我没有找到一个明确的结论,关于执行更好.
我在SqlFiddle上设置了一个简单的场景,其中Over (Partition By)似乎有一个更好的执行计划(但我并不熟悉它们).
表中的数据量是否应该改变这个?难道Over (Partition By)那么最终执行得更好?
我有相当多的查询,我想在sql server management studio上使用Include Actual Execution Plan功能测试每个查询
但是,对于1m +查询,我不可能手动执行此操作
所以我想我可以通过编程方式(来自c#)执行包含实际执行计划功能,并查看SQL服务器是否建议任何索引

我们在专用的VPS上有一个小的(现在)Asp.Net MVC 5网站.当我去服务器和启动任务管理器时,我看到"SQL Server Windows NT - 64位"正在使用大约80%的CPU和170MB的RAM,而IIS正在使用6%的CPU和400MB的RAM.服务器规格是:
数据库不是很大.它的备份不到10MB.
我试图尽可能地优化网站.我为很多控制器添加了缓存,并为很多控制器实现了甜甜圈缓存.但是今天,即使在线只有5个用户,我们的搜索也行不通.我重新启动了服务器上的Windows,它开始工作,但我得到了服务器启动时的高CPU使用率.有趣的是,当我打开SQL Server Management Studio并尝试获取顶级CPU消耗查询的报告时,它表示目前没有查询消耗任何CPU!但与此同时我可以看到SQL服务器消耗了大量的CPU.如何检查所有CPU的内容?以下是服务器的图片:

我对设计和实施网站非常谨慎.所有数据库访问都是通过最新版本的Entity Framework.我只是想知道服务器的规格是否很低.任何帮助将非常感谢.
这是sp_who2存储过程的结果.

asp.net performance cpu-usage sql-server-performance sql-server-2012
我必须free demo在我的应用程序中为最终用户提供一些服务.对于新用户而言,免费演示可以是30 mins, 1 hours, 5 hours等等(predefined time仅一次).
用户也可以消耗部分时间.比如在30分钟的免费演示中,他们今天可以使用10分钟,明天15分钟,第二天剩下的时间等等.现在如果用户选择30分钟的免费演示并登录并使用该服务.我可以通过他的开始时间和结束时间限制用户30分钟.如果开始和结束时间的总和等于30分钟,我可以将它们发送到付款页面.
现在问题出现了一些不确定的情况,例如用户关闭浏览器或他们的互联网在活动会话期间停止工作或其他任何事情.在这种情况下,由于缺乏终结时间,我无法计算他们的消耗时间.
场景可能如下(30分钟演示).
UserID StartTime EndTime Consumed(mins)
10 09-04-2015 10:00 09-04-2015 10:10 10
10 10-04-2015 05:00 10-04-2015 05:04 4
10 11-04-2015 07:46 11-04-2015 07:56 10
10 11-04-2015 10:00 // Browser closed or any uncertain condition
10 11-04-2015 11:00 // How to restrict user to use actual 30 mins because I do not have EndTime in above row to calculate Consumed mins.
Run Code Online (Sandbox Code Playgroud)
我当时可能有超过10万用户使用我们的服务,所以我找到了一个有效的解决方案.
根据我的理解,我可以创建一个单独的工作来检查用户的LastActiviteTime,并根据我可以更新他们在数据库中的消费(分钟).该Job将每分钟执行一次,另一方面,每个会话用户的浏览器将更新LastActiveTimein数据库.
这可以解决我的问题,但由于每分钟有大量的数据库请求,我不太确定我的应用程序的性能.
.net architecture sql-server performance sql-server-performance
我们发布了一个新的 sp,在测试过程中我们发现它运行时会阻塞其他 OLTP 事务。我们发现最初是因为新的 sp 导致表上的锁升级,我们减少了批量大小的数量并能够避免这种情况。即使在避免锁升级之后,它仍然会阻止传入的 oltp 事务。我认为它锁定了 oltp 事务正在更新的同一行。
我需要找到一种方法来跟踪新 sp 持有和释放的所有锁。我尝试了trace/xevents(锁获取/释放),它看起来不像捕获所有锁,可能是因为它发生得太快了。
为了了解获取的锁是什么样子,我通过从 atable 中执行 select * 来测试它。但它给了我不同的结果。当我们执行 select * 时,它不会放置一系列页面锁,所以我应该在跟踪中看到共享页面锁。但我看到的只是 IS 锁的获取和释放。
跟踪给定事务的所有锁的最佳方法是什么?
我有一个名为 Transaction_tbl 的表,其中包含超过 400 000 条记录。这是表结构:
CREATE TABLE [dbo].[Transaction_tbl](
[transactID] [numeric](18, 0) IDENTITY(1,1) NOT NULL,
[TBarcode] [varchar](20) NULL,
[cmpid] [int] NULL,
[Locid] [int] NULL,
[PSID] [int] NULL,
[PCID] [int] NULL,
[PCdID] [int] NULL,
[PlateNo] [varchar](20) NULL,
[vtid] [int] NULL,
[Compl] [bit] NULL,
[self] [bit] NULL,
[LstTic] [bit] NULL,
[Gticket] [int] NULL,
[Cticket] [int] NULL,
[Ecode] [varchar](50) NULL,
[dtime] [datetime] NULL,
[LICID] [int] NULL,
[PAICID] [int] NULL,
[Plot] [varchar](50) NULL,
[mkid] [int] NULL,
[mdlid] [int] NULL,
[Colid] [int] NULL,
[Comments] [varchar](100) …Run Code Online (Sandbox Code Playgroud) sql-server stored-procedures sql-server-2008 sql-server-performance
我们网站的一部分要求用户询问20个关于他们自己的多项选择题("个人资料").网站的这一部分将经常被查看,并偶尔更新.该网站预计会产生大量流量,因此正在考虑尝试和准备性能问题.
我可以看到将这三种存储方式存储在数据库中:
为每个问题创建1个表,每个表都有QuestionID和Answer,然后是CustomerInfo表来存储配置文件数据,外键映射到问题.
问题,Question_Type和Answers表.把所有东西都塞进这些结构中.我在这里特别关注更新配置文件所需的20个左右的插入.这是否会在高流量时受到性能影响?
非规范化单表,每个问题一个字段,在HTML和/或C#对象中硬编码答案代码.
我倾向于#2或#3.您认为什么是最佳解决方案?
sql ddl database-design denormalization sql-server-performance
sql-server ×9
sql ×3
cpu-usage ×2
performance ×2
.net ×1
architecture ×1
asp.net ×1
c# ×1
database ×1
ddl ×1
group-by ×1
ssms ×1
t-sql ×1