标签: sql-server

多线程/并行插入和哈希分区中的 SQL Server 锁存

我们正在 SQL 服务器表中进行并行、多线程插入,并希望减少闩锁。

利用散列分区来减少闩锁的缺点是什么?从本质上查询所有这些拆分的分区表是否降低了查询速度?

我们有大约 120 表插入每秒,金融系统。

其他注意事项:SQL 2016 系统每年将使用大约 50 GB 的 SSD 硬盘空间。目前,拥有 50 个核心处理器和 150 GB 的 RAM。

平台未搭建,所以没有基线测试;但我需要制定测试计划和策略。

哈希分区示例: http : //www.madeiradata.com/how-to-solve-the-tail-insert-problem-2/

CREATE PARTITION FUNCTION pf_hash (TINYINT) 
AS RANGE LEFT FOR VALUES (0,1,2,3,4,5,6,7,8);

CREATE PARTITION SCHEME ps_hash 
AS PARTITION pf_hash ALL TO ([PRIMARY]);

CREATE TABLE dbo.UserEntries_RegularWithHash 
(   
Id BIGINT IDENTITY NOT NULL,
UserId INT NOT NULL ,
CreatedDate DATETIME2 NOT NULL,
HashId AS CAST(Id % 9 AS TINYINT) PERSISTED NOT NULL,
CONSTRAINT PK_UserEntries_RegularWithHash 
PRIMARY KEY CLUSTERED …
Run Code Online (Sandbox Code Playgroud)

database-design sql-server concurrency partitioning hashing

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

在 WHERE 子句中使用日期时间列的 DATE 部分

我正在构建一个 POS 系统,在那里我收集事件发生的日期和时间。我想通过DATE在我的 SQL 查询中仅使用datetime 列的一部分来提取一些报告。

我当前的查询如下所示:

SELECT * FROM tbl_item_trans
WHERE  (date_time BETWEEN @start AND @end)
ORDER BY date_time DESC, code
Run Code Online (Sandbox Code Playgroud)

但是,如果我输入两个日期,例如 9 月 14 日和 15 日,它只会从 14 中提取数据。如果我想包括 9 月 15 日的交易,结束日期必须是 9 月 16 日。

我怎么解决这个问题?如果我只使用专栏的DATE一部分,那就更好了datetime。

在@start与@end变量使用date的数据类型,例如“2017年9月16日”。

sql-server date where

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

如何在sql server中的所有现有作业中添加一个步骤

IF (SELECT ars.role_desc
    FROM sys.dm_hadr_availability_replica_states ars
    INNER JOIN sys.availability_groups ag
    ON ars.group_id = ag.group_id
    AND ars.is_local = 1) <> 'PRIMARY'
BEGIN
   --We're on the secondary node, throw an error
   THROW 50001, 'Unable to execute job on secondary node',1
END
Run Code Online (Sandbox Code Playgroud)

设置此步骤以在成功时继续下一步,并在失败时退出报告成功的作业。

你能解释一下如何在所有现有的 SQL 服务器作业中添加这个步骤吗?

sql-server sql-server-2012 jobs

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

将数据库(在 SQL Server 2012 中创建)附加到 SQL Server 2014 实例而不升级它

我在生产服务器(SQL Server 2012)中有一个数据库,我有一个开发服务器(SQL Server 2014)。

我需要在开发服务器中附加数据库,但我意识到一旦附加它就会自动升级到 2014 版,因此我无法在生产服务器中再次附加它。

是否可以在不升级的情况下将数据库附加到开发服务器中?

我们计划在开发、分离和将其附加到生产中进行更改。

sql-server attach

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

优化查询。FOR XML PATH 或一些替代方案?

有什么办法可以优化FOR XML PATH语句吗?或者也许我应该使用另一种方法?

目前的方法根本不可接受。这需要几分钟。我知道视图是一个非常大的联盟,需要时间来消耗它,但也许是另一种方式......

这是查询:

SELECT t.serialNumber as TVM
  ,[issuanceDate] as transactionDate
  ,ioy.tvmTransactionId as TVM_TRANS_ID
  ,STUFF((SELECT ', ' + stv.carrierSN
    FROM HERMES.wts.v_SaleTransactionView as stv
    WHERE stv.tvmTransactionId = ioy.tvmTransactionId
    and stv.serialNumber = 'M040'
    FOR XML PATH ('')), 1, 2, '') as [serial_numbers]
  FROM [hermes].[wts].[IOYLog] ioy
  left join Hermes.hermes.Terminals t on ioy.tp_terminalId = t.tp_terminalId
  left join hermes.hermes.POS p on t.tp_POSId = p.tp_POSId
  left join [Hermes].[wts].[IOUPaymentStatus] [is] on [is].[tp_paymentStatusId] = ioy.status
  WHERE [is].includeInReports = 1 
  and (issuanceDate BETWEEN '2017/09/01' AND '2017/09/08') …
Run Code Online (Sandbox Code Playgroud)

performance sql-server execution-plan concat query-performance

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

Nvarchar 列被截断为 256 个字符

I have a SQL Server Express 2012 database. There is a table which previously had a column of type nvarchar(255). Now my requirements have changed and I am required to store long strings in the same column, so I modified the columns to have size 512.

alter Table [dbo].[mytable] ALTER COLUMN [mycol] nvarchar(512) NULL;
Run Code Online (Sandbox Code Playgroud)

Now when I try updating data in the column whose size was increased, the update goes through fine. But when I query the data, the …

sql-server alter-table

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

扩展事件不会捕获每个 rpc_completed

我有一个长时间运行的扩展事件会话,它捕获rpc_completed为几个过程过滤的事件。它发现了一些已经运行的。但其他人当我知道他们已被处决时,它并没有捕捉到他们。我知道这一点的原因是因为我查看了缓存并发现它们在那里被调用。

我正在使用 SQL Server 2016。我将过滤object_name作为字段名称、equal_i_sql_unicode_string运算符和值减去架构名称。我还修改了会话以添加我知道经常使用的 proc,它可以很好地捕获那些。

为什么它会忽略而不捕获一些?

sql-server stored-procedures extended-events

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

如何从导出的数据在 MS SQL Server 2016 中完全重新创建数据库

最近,我的 ~40Gb 数据库中经常出现许多一致性错误。当然,我使用DBCC CHECKDB, 即使REPAIR_ALLOW_DATA_LOSS(当它询问时),但是我再次遇到错误,即使在只读操作之后也是如此。

数据库本身存储在 SSD 驱动器上,这没问题,所以我怀疑数据库文件中存在一些隐藏的错误。

所以,完整的周期:我在本地 PC 上安装了 MSSQL 2016,只连接了 1 个用户。每天我都以自定义格式获取数据(~1.5M 记录),备份基础并将数据插入基础(非批量插入,索引)。在那次行动中,没有人接触基地。后来我不时进行高负载查询(不同的统计数据)。我经常遇到一致性错误、校验和错误、索引错误(目前没有存储确切的输出)。可以通过重建索引来纠正索引错误;其他人只能通过DBCC CHECKDB使用该REPAIR_ALLOW_DATA_LOSS选项来修复。之后,它再次工作 - 一段时间。

我不相信问题出在我的 SSD 驱动器上。在过去的几年里,我在这台 PC 上尝试了不同的驱动器,行为没有改变。

我怀疑,即使在DBCC CHECKDB成功运行后,文件结构中也存在一些隐藏的错误,这些错误会导致以后出现新的错误。所以我只想将数据提取到线性文件然后导入。标准导出向导导出数百行,然后停止没有错误。

是否有一种正确且可靠的方法可以将整个数据库导出到文本/二进制文件(但不是 mssql),然后重新创建数据库而不会丢失这些文件中的数据?我尝试了备份还原,但看起来数据库一致性问题在还原过程中仍然存在。

sql-server backup restore

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

POS 性能问题 AX 2012 R3

我有迟钝。

任何人都可以查看此计划(PasteThePlan) 并告诉我需要优化的内容吗?这是实际的计划。

这是从应用程序获取客户信息的过程的一部分。在跟踪中我发现查询需要很长时间。大约需要 14 秒,而在另一个 POS 中则不到 1 秒。

我使用的是 SQL Server 2016 - Express Edition

performance sql-server sql-server-2016 microsoft-dynamics query-performance

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

缩小 mdf 文件 - SQL Server 2012

我需要收缩 SQL Server 2012 中的数据文件。我在数据库任务中使用收缩文件选项,并使用“在释放未使用空间之前重新组织页面”选项。SQL Server 说我可以将文件缩小到 350000 MB 的最小大小。如果我尝试将其缩小到 300000 MB 会发生什么,这会从数据库中删除数据吗?简单来说,如果我缩小文件超过文件的最小大小,它是否会从文件中删除数据?

sql-server shrink sql-server-2012

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