我们正在 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) 我正在构建一个 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日”。
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 2012)中有一个数据库,我有一个开发服务器(SQL Server 2014)。
我需要在开发服务器中附加数据库,但我意识到一旦附加它就会自动升级到 2014 版,因此我无法在生产服务器中再次附加它。
是否可以在不升级的情况下将数据库附加到开发服务器中?
我们计划在开发、分离和将其附加到生产中进行更改。
有什么办法可以优化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
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 …
我有一个长时间运行的扩展事件会话,它捕获rpc_completed为几个过程过滤的事件。它发现了一些已经运行的。但其他人当我知道他们已被处决时,它并没有捕捉到他们。我知道这一点的原因是因为我查看了缓存并发现它们在那里被调用。
我正在使用 SQL Server 2016。我将过滤object_name作为字段名称、equal_i_sql_unicode_string运算符和值减去架构名称。我还修改了会话以添加我知道经常使用的 proc,它可以很好地捕获那些。
为什么它会忽略而不捕获一些?
最近,我的 ~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),然后重新创建数据库而不会丢失这些文件中的数据?我尝试了备份还原,但看起来数据库一致性问题在还原过程中仍然存在。
我有迟钝。
任何人都可以查看此计划(PasteThePlan) 并告诉我需要优化的内容吗?这是实际的计划。
这是从应用程序获取客户信息的过程的一部分。在跟踪中我发现查询需要很长时间。大约需要 14 秒,而在另一个 POS 中则不到 1 秒。
我使用的是 SQL Server 2016 - Express Edition
performance sql-server sql-server-2016 microsoft-dynamics query-performance
我需要收缩 SQL Server 2012 中的数据文件。我在数据库任务中使用收缩文件选项,并使用“在释放未使用空间之前重新组织页面”选项。SQL Server 说我可以将文件缩小到 350000 MB 的最小大小。如果我尝试将其缩小到 300000 MB 会发生什么,这会从数据库中删除数据吗?简单来说,如果我缩小文件超过文件的最小大小,它是否会从文件中删除数据?
sql-server ×10
performance ×2
alter-table ×1
attach ×1
backup ×1
concat ×1
concurrency ×1
date ×1
hashing ×1
jobs ×1
partitioning ×1
restore ×1
shrink ×1
where ×1