Questions tagged «sql-server-2017»

SQL Server 2017(主要版本14.00.xxxx)。还请标记sql-server。

3
在只读副本上长时间运行的查询会占用主数据库上的时间
我有一个4节点AG设置,如下所示: 所有节点的VM硬件配置: Microsoft SQL Server 2017企业版(RTM-CU14)(KB4484710) 16个vCPU 356 GB RAM(长话短说...) 最大并行度:1(根据应用程序供应商的要求) 并行成本阈值:50 服务器最大内存(MB):338944(331 GB) AG配置: 节点1:主节点或同步提交不可读的辅助节点,配置为自动故障转移 节点2:主节点或同步提交不可读的辅助节点,配置为自动故障转移 节点3:具有异步提交的可读辅助集,配置为手动故障转移 节点4:具有异步提交的可读辅助节点集,配置为手动故障转移 有疑问的查询: 此查询没有什么疯狂的,它提供了应用程序内各种队列中未完成工作项的摘要。您可以从下面的执行计划链接之一查看代码。 主节点上的执行行为: 在主要节点上执行时,执行时间通常约为1秒标记。这是执行计划,以下是从主节点从STATISTICS IO和STATISTICS TIME捕获的统计信息: (347 rows affected) Table 'Worktable'. Scan count 647, logical reads 2491, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, …

1
为什么我有多个(未关联的)时间历史表?
我一直在建立具有SQL Server 2017后端的概念证明系统。 系统使用临时表记录资产配置并跟踪随时间的变化。 我有一个链接到历史记录表的数据表,我们称它为dbo.MSSQL_TemporaryHistoryFor_12345678900。 到目前为止,一切都很好。我有两个问题: 今天,我关闭了表的版本控制功能,因此可以添加一个计算列。完成此操作,然后再次打开,没有错误。 现在,我发现我无法查询更改之前的任何历史数据。新数据将添加到历史记录中,但是没有任何预先设置。 在SSMS内部,我现在可以看到有多个历史记录表,它们都具有相同的名称,但带有十六进制后缀,例如dbo.MSSQL_TemporaryHistoryFor_12345678900_A0B1C2D3。它们未链接在主数据表下方。它们只是在数据库内部自行浮动。当我查询sys.tables时,这些没有显示为历史表,也没有链接到主数据表。 这些表确实包含丢失的历史数据。 因此,我的问题是: 这些附加表代表什么? 他们是如何创建的? 有什么办法可以将它们重新链接到主要历史链中,以便我可以获取历史报告吗? 这非常令人沮丧,因此将非常感谢您能提供的任何帮助。谢谢。

2
为charindex函数分割/存储长字符串的最快方法
我有一个1 TB的数字字符串。给定一个12个字符的数字序列,我想在原始字符串(charindex函数)中获得该序列的开始位置。 我已经使用SQL Server使用1GB字符串和9位子字符串测试了此字符串,并将该字符串存储为varchar(max)。Charindex需要10秒。将1GB的字符串分成900个字节的重叠块,并创建一个表(StartPositionOfChunk,Chunkofstring),该表的二进制排序规则中使用chunkofstring,建立索引所需的时间不到1秒。10GB的后一种方法是10个数字子串,将charindex升至1.5分钟。我想找到一种更快的存储方法。 例 字符串:0123456789-搜索345 charindex('345','0123456789')的子字符串得出4 方法1:现在,我可以将其存储在由一列组成的SQL Server表strtable中colstr并执行: select charindex('345',colstr) from strtable 方法2:或者我可以通过拆分原始字符串来组成表strtable2(pos,colstr1):1; 012 | 2; 123 | 3; 234 aso,然后我们可以进行查询 select pos from strtable2 where colstr1='345' 方法3:我可以通过将原始字符串分成较大的块1; 01234 |来组成表strtable2(pos2,colstr2)。4; 34567 | 7; 6789然后 select pos2+charindex('345',colstr2) from strtable2 where colstr2 like '%345%' 第一种方法最慢。 第二种方法炸毁了数据库的存储容量! 方法3:在二进制排序规则中,将colstr2长度设置为900字节,在此列上创建索引需要1秒的时间来进行1GB字符串和9位数字子字符串的搜索。对于10GB的字符串和10位的子字符串,ist需要90秒。 还有其他想法如何使它更快(也许通过利用包含长整数的数字组成的字符串,....)? SQL Server 2017 …

1
数据固有地排序,就好像它是聚集索引一样
我有下表,其中包含750万条记录: CREATE TABLE [dbo].[TestTable]( [Id] [int] IDENTITY(1,1) NOT NULL, [TestCol] [nvarchar](50) NOT NULL, [TestCol2] [nvarchar](50) NOT NULL, [TestCol3] [nvarchar](50) NOT NULL, [Anonymised] [tinyint] NOT NULL, [Date] [datetime] NOT NULL, CONSTRAINT [PK_TestTable] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, …

2
从SSMS时间表中选择TOP N行丢失
我在数据库中使用时态表,当我在Management Studio 2017(v17.4 14.0.17213.0)中右键单击表时,在上下文菜单中没有看到`` 选择前1000行''(非时态表没有问题) ) 有什么想法如何找回此上下文菜单吗?我感觉这与我正在运行的SQL Server版本有关(SQL 13.1.4001.0 Express Edition)

3
SQL Server错误,“ FETCH语句中选项FIRST的无效用法。”
从2012年开始,SQL Server文档显示它们支持OFFSET..FETCH我尝试使用的而不是LIMIT。 以下内容在PostgreSQL中可以很好地对结果集进行采样: SELECT * FROM ( VALUES (1),(2),(3) ) AS t(x) OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY; 但是,使用SQL Server,我得到 Msg 153, Level 15, State 2, Line 4 Invalid usage of the option FIRST in the FETCH statement. 这里发生了什么?SQL Server是否支持标准化的OFFSET.. FETCH?

2
无法删除没有相关文件的文件组
我在SQL Server 2017 CU3上遇到一些奇怪的错误消息。我正在迁移数据库并重组文件组。“重新组织”是指我使用存储过程,该过程在对象的新文件组上创建分区函数和分区方案,在分区时重建索引,然后删除分区。 最后,我有一些空文件组。他们的文件被删除。文件组本身也将被删除。在大多数情况下,此方法效果很好。但是对于两个数据库,我删除了文件... 剩下一个文件组,但没有文件关联,但是 ALTER DATABASE REMOVE FILEGROUP 引发错误5042: 无法删除文件组“ xyz”,因为它不为空。 题 我如何摆脱那个空文件组...可能是什么问题? 我已经阅读了一些常见问题,但是它们在我的系统中不存在: 已检查: SELECT * FROM sys.partition_schemes; SELECT * FROM sys.partition_functions; 0行...数据库中没有分区对象 UPDATE STATISTICS 对于数据库中的所有对象 没有效果 检查文件组上的索引: SELECT * FROM sys.data_spaces ds INNER JOIN sys.indexes i ON ds.data_space_id = i.data_space_id WHERE ds.name = 'xyz' 0行 检查文件组中的对象: …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.