标签: sql-server

SQL Server 2014 中的 MASSIVE 标识列值跳转

因此,在基本编码和测试过程中,我们看到多个表的 Identity 值出现了巨大的无模式跳跃。我们不知道任何服务器故障或尝试进行批量操作,但 DBA 正在查看日志。

差距不是典型的 1,000 或 10,000 与服务器重启等情况。

对于Application_NO具有 2,320 行的表,其间隔为10,410,345

Transaction_Payment_NO 对于包含 685 条记录的表,跳出惊人的 1,712,149,313 条记录。

关于什么可能导致如此大且看似随意的跳跃的任何想法?

标识值在多个表上跳转

sql-server identity sql-server-2014

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

即使“执行后忽略结果”,什么也会导致 SELECT 语句执行延迟和高 ASYNC_NETWORK_IO

我们的 SQL Server 面临性能问题。

7 台服务器,都运行相同的应用程序,都存在相同的问题。

SELECT @@VERSION
Microsoft SQL Server 2017 (RTM-CU19) (KB4535007) - 14.0.3281.6 (X64)   Jan 23 2020 21:00:04   Copyright (C) 2017 Microsoft Corporation  Standard Edition (64-bit) on Windows Server 2019 Standard 10.0 <X64> (Build 17763: ) (Hypervisor) 
Run Code Online (Sandbox Code Playgroud)

当您查看累积的服务器总等待统计信息时,会显示 99% ASYNC_NETWORK_IO。我们首先假设这是由应用程序引起的。然而:

当我们获取查询(从应用程序捕获)并从 SSMS 中将其作为测试运行时,执行后忽略结果。当我们通过 TCP 连接运行它时,大约需要 6 秒,通过命名管道连接运行它大约需要 50 秒。我们得到的结果非常慢。

(不考虑执行后的结果,查询给出的结果为 57k 行 227 列,大小为 221MB。)

它是核心版本,因此我们无法使用本地连接。我们测试了使用 TCP 和命名管道进行远程连接。

通过 TCP

SQL Server parse and compile time: 
   CPU time = 0 ms, elapsed time …
Run Code Online (Sandbox Code Playgroud)

sql-server waits sql-server-2017 query-performance

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

使用“OR”运算符时的 SQL Server 索引扫描

我们实现了一个 Google 风格的搜索,其中在前端触发去抖动后运行 SQL 查询。(我们知道 SQL 可能是错误的技术,但我在这里陷入了启动混乱。)查询:

SELECT 
    TOP(50) [Name], [Surname]
FROM 
    [dbo].[Clients]
WHERE 
    [Name] LIKE @SearchTerm + '%' OR
    [Surname] LIKE @SearchTerm + '%'
Run Code Online (Sandbox Code Playgroud)

这是一个相当大的表,所以我在两列上添加了两个非聚集索引以帮助加快速度:

CREATE NONCLUSTERED INDEX [IX_Patients_Name] ON [dbo].[Clients]
(
    [Name] ASC
)
INCLUDE([Surname]);

CREATE NONCLUSTERED INDEX [IX_Patients_Surname] ON [dbo].[Clients]
(
    [Surname] ASC
)
INCLUDE([Name]);
Run Code Online (Sandbox Code Playgroud)

我的想法是 SQL 会在两列上进行索引查找,但查询优化器似乎决定使用索引扫描。

聚集索引查找

对于这个简单的用例,这可能不是一个真正的问题,但我们有更复杂的版本,具有多个连接等。

有什么方法可以优化此查询以使用搜索吗?

sql-server optimization nonclustered-index

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

我应该获得什么 Microsoft DBA 证书?

我正在考虑获得 Microsoft DBA 认证,但是试图找出我应该学习的确切证书有点令人困惑。

我的公司使用本地 SQL Server 2017,但似乎 Azure 数据库变得非常流行。那么,现场会消失吗?

“MCSA:SQL 2016 数据库管理”是我需要的吗?

如果我收到“MCSA:SQL 2016 数据库管理”,我是否能够管理 Azure DB?那有多不同?

谢谢

sql-server sql-server-2016 certificate

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

为什么 BCP 会创建这么大的文件?

我正在通过 BCP 创建一些报告以通过电子邮件发送。

create TABLE ##tempsss
    (
        create TABLE ##JOB_DataAssociacao_verContrato
(
     F1        VARCHAR(6)  
    ,F2        VARCHAR(200)  
    ,F3        VARCHAR(22)  
    ,F4        char(1)    
    ,F5         varchar(10) 
    ,F6         varchar(15)
    ,F7         varchar(30)  
    ,F8          varchar(10)      
    ,F9          VARCHAR(18)  
)  --it needs to be varchar to be able to use header
    )
    
insert into  ##tempsss
SELECT 
...fields...     
FROM some table or view
go
-------------------------------------------------------------
--passo 2 --

exec xp_cmdshell 'bcp "select ''field1'',''field2'',''field3'' UNION ALL select * from table or view" queryout "filepath\filename.xls" -U sa -P password -w  -S servername'
------------------------------------------------------------- …
Run Code Online (Sandbox Code Playgroud)

sql-server bcp sql-server-2012

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

为每个组选择除 Max(date) 之外的所有内容

我有一张桌子,除了每个 groupID 的最大日期之外,我还想在其中提取所有内容。有没有简单的方法来做到这一点?

这是我想要做的:

SELECT 
groupId, 
Types,
MAX(Dates) as date

FROM TableData

Where Dates < Max(dates)

GROUP BY 
groupId, 
Types

//The table looks as follows:
ID      |   GroupID | Date
1       |     A     | 10-10-2020 -> don't show
2       |     A     | 09-10-2020
3       |     A     | 08-10-2020
4       |     B     | 10-10-2020 -> don't show
5       |     B     | 09-10-2020
6       |     B     | 08-10-2020


//Expected result:
GroupID | Date
  A     | 09-10-2020
  A     | 08-10-2020
  B     | 09-10-2020 …
Run Code Online (Sandbox Code Playgroud)

sql-server select

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

fn_LocalTimeToUTC 的基本替代方案

我的云提供商阻止我访问fn_LocalTimeToUTC和fn_UTCToLocalTime.

我将如何在不使用这些函数的情况下在 SQL 中手动和直接获得这两个函数提供的相同功能?

为了进一步简化,我们所有的用户都在英国。

sql-server t-sql functions sql-server-2017

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

两个备份程序,差异和注销同步

我正在 SQL Server 2017 上运行加密备份。

进行测试恢复,失败:

RESTORE DATABASE [test] 
FROM DISK = N'\\DPH-DD-SLI-001\SLI_SQL_Backups\Encrypted\DPH-SQL-SLI-12P\BTBLEAD\FULL\DPH-SQL-SLI-12P_BTBLEAD_FULL_20201021_185145.bak' 
WITH NORECOVERY, REPLACE; 

RESTORE DATABASE [test] 
FROM DISK = N'\\DPH-DD-SLI-001\SLI_SQL_Backups\Encrypted\DPH-SQL-SLI-12P\BTBLEAD\DIFF\DPH-SQL-SLI-12P_BTBLEAD_DIFF_20201022_071002.bak' 
WITH NORECOVERY; 
Run Code Online (Sandbox Code Playgroud)
Processed 199264 pages for database 'test', file 'BTBLEAD_Data' on file 1.
Processed 2 pages for database 'test', file 'BTBLEAD_Log' on file 1.
RESTORE DATABASE successfully processed 199266 pages in 446.348 seconds (3.487 MB/sec).
Msg 3136, Level 16, State 1, Line 6 This differential backup cannot be restored
because the database has not been restored to …
Run Code Online (Sandbox Code Playgroud)

sql-server backup sql-server-2017

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

SQL Server 是否支持来自多个连接的并行批量插入?

SQL Server 是否支持对同一数据库表的并行批量插入?

对我的特定用例的一些说明:

  • 该表有一个由两个不同索引键组成的聚集索引和两个非聚集索引,每个索引由一个索引键组成。
  • 并行在这里意味着来自多个不同的连接。每个连接都是一个唯一的sqlalchemy.orm.session对象,每个Session使用该Session.bulk_insert_mappings()方法同时插入20k条数据。

我的具体问题:

  • 我试图了解 SQL Server 端的幕后情况。是否有所有批量插入的队列,并且每个批量插入都按照进来的顺序一个一个地执行?还是所有的插入都是同时进行的,并行的?
  • 我们还假设没有两个不同的连接会尝试插入相同的记录(基于主键),但是如果两个并行连接尝试插入会导致 PK 违规的记录怎么办?
  • 如果我们要求 SQL Server 2008 与 2017,上述问题的答案是否不同?
  • Microsoft 是否有关于此的任何类型的文档?

sql-server-2008 sql-server concurrency bulk-insert sql-server-2017

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

视图中的时态表语法

考虑以下情况。我有一个系统版本的表“测试”。我还有一个表,其中包含我上次检查该表中已修改行的时间。

CREATE TABLE [Delta]
(
    Tablename NVARCHAR(50) NOT NULL,
    Proccess UNIQUEIDENTIFIER NOT NULL,
    LastDelta DATETIME2 NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

我现在想创建一个执行此查询的视图

Fake syntax
SELECT * 
FROM [test]
FOR SYSTEM_TIME AS OF (select LastDelta from Delta where TableName = 'Test')
Run Code Online (Sandbox Code Playgroud)

提供日期时间的唯一选项是固定值或参数吗?参数对视图没有用处,固定值也无济于事。

我可以用我自己的查询模拟“for system_time as of”的效果,但我想知道是否有一种我错过的方法,如“假语法”或类似的所示。

sql-server temporal-tables

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