标签: sql-server

您在使用 SQL Server 时遇到的前 3 个性能问题是什么?

我是埃因霍温 Fontys 大学的学生,我目前正在进行一系列采访以帮助开发 SQL Server 工具,我想从该领域的专家那里得到反馈。

我的问题之一是:

您在使用 SQL Server 实例时遇到的前 3 个性能问题是什么?您如何确定这些问题?

我对用于衡量这一点的脚本和工具特别感兴趣。

performance sql-server

15
推荐指数
8
解决办法
1429
查看次数

最佳实践 SQL Server 维护计划是什么样的?

我是埃因霍温 Fontys 大学的学生,我目前正在进行一系列采访以帮助开发 SQL Server 工具,我想从该领域的专家那里得到反馈。

我的问题之一是:

最佳实践 SQL Server 维护计划是什么样的?您为此使用 SQL Server 维护计划,还是使用自定义脚本?

sql-server best-practices maintenance

15
推荐指数
2
解决办法
7130
查看次数

堆被认为是索引结构还是严格来说是没有索引的表结构?

受这篇文章的启发:https : //twitter.com/#!/ SQLChicken/status/ 102930436795285505

堆:它们被认为是索引结构还是严格来说是没有索引的表结构?

sql-server heap

15
推荐指数
2
解决办法
968
查看次数

什么是“异构查询”?

我收到以下关于我在程序中运行的 SQL 查询的错误消息。SQL Server 2005 T-SQL。

异构查询需要为连接设置ANSI_NULLS和ANSI_WARNINGS选项。这确保了一致的查询语义。启用这些选项,然后重新发出您的查询。(严重性 16)

修复它很容易,设置ANSI_NULLS和ANSI_WARNINGS ON,但我想知道异构查询是什么。谷歌搜索带来了几十个结果,告诉我设置ANSI_NULLS和ANSI_WARNINGS,没有解释这个词的意思。查询是:

UPDATE SRV.DB.DBO.TABLE SET Column=
            (SELECT Column 
            FROM SRV1.DB.DBO.TABLE)
Run Code Online (Sandbox Code Playgroud)

我认为这是由于在一个查询中连接到多个数据库引擎,否则我从未遇到过此错误。
“异构”是否只是指在这种情况下查询两个不同的数据库引擎?

sql-server terminology errors

15
推荐指数
2
解决办法
2万
查看次数

用于存储标志数组的数据类型(位图/位数组)

我需要为表的每条记录存储一个位数组,支持以下操作:

  • 测试是否设置了位,并设置了位(使用 SQL)

  • 使用 ADO 2.8(不是 ADO.NET)查询和设置值

  • 索引(为了从“覆盖索引”功能中受益)

要存储在此数组中的最大位数是固定的,但可能会超过 32。也就是说,一个简单的int列并不总是有效。

从我目前所见,我的选择是:

  1. 使用多个int列
  2. 使用bigint(只要位数 <= 64 即可)
  3. 使用二进制
  4. ?

第一个选项可行,但需要对访问数据的代码进行大量重构。第二个选项只是暂时的缓解,从我目前的搜索来看,我不太确定 ADO 是否与bigint一起工作得那么好。我没有使用binary 的经验,我不知道任何其他选项。

根据要求,您会选择哪种数据类型?

sql-server-2005 sql-server-2008 sql-server datatypes

15
推荐指数
1
解决办法
2万
查看次数

强制 SQL Server 按照书面形式运行查询条件?

我正在使用 SQL Server 2008 R2 并且我有这个伪查询 (SP):

select ...
from ...
WHERE    @LinkMode IS NULL
     AND (myColumn IN (...very long-running query...))
     ...
     ...
Run Code Online (Sandbox Code Playgroud)

问题是查询需要很长时间才能执行——即使我使用@LinkMode=2.

正如您所注意到的,只有当 @LinkMode 为 null 时才应该执行长时间运行的查询,而这里不是这种情况。在我的情况下 @LinkMode = 2 !

但是,如果我将其更改为:

 select ...
    from ...
    WHERE    1=2
         AND (myColumn IN (...very long time exeted query...))
     ...
     ...
Run Code Online (Sandbox Code Playgroud)

SP确实跑得很快。

我以前听说有时优化器可以优化标准的顺序。

所以我问:

  • 即使优化器选择了不同的路由,还有什么比检查 if 更快=null?我的意思是,我认为检查if a==null是多比正在运行的其他长的查询速度更快...

  • 如何强制SQL Server 按照我编写的方式运行查询(相同的顺序)?

sql-server optimization sql-server-2008-r2

15
推荐指数
2
解决办法
5347
查看次数

SQL Server 未使用所有 CPU 内核/线程

升级 SQL Server 的硬件后,我们在 Windows 任务管理器中注意到 SQL 实例仅使用了可用线程的一半:

任务管理器.

服务器具有以下硬件和软件:

  • Windows 2008 R2 企业版 64 位 SP1
  • Intel Xeon E7-4870 - 4 个处理器(40 个内核,80 个线程)
  • Microsoft SQL Server 2012 企业版(64 位)

运行select cpu_count from sys.dm_os_sys_info返回 40。

操作系统可以看到所有 80 个线程。

为什么只使用了服务器一半的处理能力?

我们在两台服务器上拥有相同的硬件和软件,并且它们都表现出相同的行为。

sql-server sql-server-2012 hardware

15
推荐指数
2
解决办法
5万
查看次数

stats_column_id 和 index_column_id 不会随着聚集索引的物理顺序改变而更新

除非我误解了列的用途,否则以下代码表明聚集索引结构的更改不会更改sys.stats_columns DMV 中stats_column_id列的序数位置 ( ) 。(在 AdventureWorks2014、AdventureWorks2008R2 中测试)

select i.name, c.name, ic.column_id, ic.index_column_id
from sys.indexes i 
join sys.index_columns ic
    on i.object_id = ic.object_id
    and i.index_id = ic.index_id
join sys.columns c 
    on i.object_id = c.object_id
    and ic.column_id = c.column_id
where i.name = 'PK_BusinessEntityAddress_BusinessEntityID_AddressID_AddressTypeID'
order by ic.key_ordinal;

select sh.name,s.name, c.name, c.column_id, sc.column_id, sc.stats_column_id
from sys.stats s 
join sys.stats_columns sc
    on s.object_id = sc.object_id
    and s.stats_id = sc.stats_id
join sys.columns c 
    on s.object_id = c.object_id
    and sc.column_id = c.column_id
join …
Run Code Online (Sandbox Code Playgroud)

sql-server statistics dmv

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

在 PowerShell 中通过 SQLCMD 连接到 LocalDB

我正在尝试使用 SQLCMD 实用程序通过 PowerShell 访问我计算机上的“localdb\MSSQLLocalDB”服务器。我使用的是 PowerShell v5、.NET v5.0,服务器名称是(localdb)\MSSQLLocalDB我在 Microsoft SQL Server Management Studio 2014 中连接到它时的名称。

PS C:\> sqlcmd -S localdb\MSSQLLocalDB并PS C:\> sqlcmd -S .\localdb\MSSQLLocalDB导致此错误:

Sqlcmd:错误:Microsoft ODBC Driver 11 for SQL Server:SQL Server 网络接口:定位服务器/实例时出错 [xFFFFFFFF]。

我在 Management Studio 中查询服务器名称SELECT @@ServerName并-S在上面的命令之后使用它并得到相同的错误。

PS C:\> sqlcmd -S localdb 给出这个错误:

Sqlcmd:错误:用于 SQL Server 的 Microsoft ODBC 驱动程序 11:命名管道提供程序:无法打开与 SQL Server 的连接 [53]

其他注意事项:我能够连接到服务器并使用此连接字符串在 C# 控制台应用程序中使用名为testdb01的数据库System.Data.SqlClient:

"Data Source=(localdb)\\mssqllocaldb;Initial Catalog=testdb01;Integrated Security=SSPI;"
Run Code Online (Sandbox Code Playgroud)

sql-server powershell sqlcmd sql-server-localdb

15
推荐指数
1
解决办法
2万
查看次数

大量插入阻止选择

我遇到了大量阻止我的 SELECT 操作的 INSERT 的问题。

架构

我有一张这样的表:

CREATE TABLE [InverterData](
    [InverterID] [bigint] NOT NULL,
    [TimeStamp] [datetime] NOT NULL,    
    [ValueA] [decimal](18, 2) NULL,
    [ValueB] [decimal](18, 2) NULL
    CONSTRAINT [PrimaryKey_e149e28f-5754-4229-be01-65fafeebce16] PRIMARY KEY CLUSTERED 
    (
        [TimeStamp] DESC,
        [InverterID] ASC
    ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF
    , IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON
    , ALLOW_PAGE_LOCKS = ON)
)
Run Code Online (Sandbox Code Playgroud)

我还有这个小助手程序,它允许我使用 MERGE 命令插入或更新(冲突时更新):

CREATE PROCEDURE [InsertOrUpdateInverterData]
    @InverterID bigint, @TimeStamp datetime
    , @ValueA decimal(18,2), @ValueB decimal(18,2)
AS
BEGIN
    MERGE [InverterData] AS TARGET
        USING (VALUES (@InverterID, …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server locking

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