小编Ang*_*ker的帖子

超级易变表有哪些选项?

我继承了一个非常不稳定的表,它是一个映射谁拥有系统中的资源。在任何给定的时刻,可能有十几个插入/删除/读取与该表相反。但是,系统中永远不会超过 30-40 行。

系统是SQL 2000时代写的,对表的访问是通过sp_getapplock/sp_releaseapplock系统sprocs序列化的,所以只有1个请求在修改表。此外,INSERT & DELETE 语句执行WITH (TABLOCK)。阅读十年前的笔记,它指出如果没有这些限制,系统将经历不间断的死锁。

我已将数据库移植到 SQL Server 2016 企业版。现在系统的吞吐量增加了 10 倍,这张表很容易成为最大的瓶颈。

对于像 SQL 2016 这样易变的表,我有哪些选择?

我正在寻找快速(希望是并发)访问并且没有死锁。

sql-server deadlock sql-server-2016

5
推荐指数
1
解决办法
1135
查看次数

SSMS 2016 需要很长时间才能打开索引的上下文菜单

  1. 转到对象资源管理器中的随机表
  2. 将其扩展到索引
  3. 右键单击索引 - 大约需要10 秒才能出现

如果我尝试DROP & CREATE INDEX从上下文菜单创建脚本,则需要类似的时间。

我查看了 Profiler 跟踪,它有大约 4 页的大量重复查询。如果我查看任务管理器的“性能/以太网”选项卡,我会发现它以 800kb-1mb 的速率传输信息,并以大约 200kb 左右的速率发送信息。

这是一个错误吗?特征?我是否缺少一些简单的设置?

  • SSMS 版本:13.0.15900.1。
  • 将 SSMS 更新到 13.0.16000.28,但没有效果。
  • SQL Server 版本:2016,累积更新 2。
  • 我安装了 SQL Prompt 7。卸载了,但没有任何改变。
  • SELECT COUNT(*) FROM sys.indexes;返回 1979 年。
  • SELECT COUNT(*) FROM sys.partitions;返回 1973 年。

盒子是我自己的,所以没有争议。另外,这个盒子是我设计过的速度最快、规格最好的盒子。除了这个特定的操作之外,一切都很敏捷。

sql-server ssms sql-server-2016

5
推荐指数
1
解决办法
4646
查看次数

我的设置的硬盘配置

我有一个相当大的事务数据库 (100GB),有很多用户。数据库访问完全通过存储过程进行,这些过程大量使用临时表、表变量、游标和其他有趣的东西。

我正在一个新盒子上试用它以提高性能。新盒子有 5 个独立的物理硬盘。我正在努力想出一个最佳设置(主要是虽然无知,但我通常是 ac# dev)。到目前为止,我得到了以下信息:

Drive C: OS, SQL install, TempDB log
Drive D: Database data
Drive E: Database log
Drive F: TempDB data
Drive G: Databases indexes
Run Code Online (Sandbox Code Playgroud)

我走的是正确的道路吗?有什么明显的错误吗?

performance sql-server-2005 sql-server hardware

1
推荐指数
1
解决办法
221
查看次数

是否可以将 SQL Server 2005 Standard 就地升级到 SQL 2012 Enterprise?

目前,我有一个 SQL 2005 标准框。我想就地将其升级到 SQL 2012 Enterprise。当我说到位时,我指的是类似于 Office 2010 的安装,例如,它删除旧的 (Office 2007) 版本,将自身绑定到其前身曾经拥有的扩展并保留所有设置。

这可能吗?

如果不是,应该走什么程序?到目前为止,我得到了这个。

  1. 备份数据库
  2. 写下所有设置。
  3. 卸载 SQL 2005。
  4. 安装 SQL 2012 企业版。
  5. 恢复设置
  6. 恢复数据库。

sql-server-2005 sql-server upgrade sql-server-2012

1
推荐指数
1
解决办法
1751
查看次数

为什么内置距离函数比我自定义的慢这么多?

我想找到两组坐标之间的距离。首先我使用内置函数:

declare @lat1 real = 33.1, @lon1 real =-117.1, @lat1 real = 39.6, @lon1 real =-98.7
declare @source geography = geography::Point(@lat1, @long1, 4326);
declare @target geography = geography::Point(@lat2, @long2, 4326);

select  @source.STDistance(@target)     
Run Code Online (Sandbox Code Playgroud)

现在我使用手动计算来做同样的事情:

 -- Kilometers to Miles: 0.621371, Earth Radius: 6378.137
 select 0.621371 * 6378.137 * ACOS(ROUND(
    (SIN(PI() *  @lat2 /180) * SIN(PI() * @lat1/180))
    + (COS(PI() *  @lat2 /180) * COS(PI() * @lat1/180) * COS(PI() * @lon1/180 - PI() * @lon2 /180)), 12))
Run Code Online (Sandbox Code Playgroud)

在我对 SQL Server 2014 的测试中,手动功能比内置功能快 4 …

sql-server sql-server-2014

0
推荐指数
1
解决办法
55
查看次数