标签: sql-server

为什么BULK INSERT按随机顺序插入数据?

我有一个csv包含 350,000 行的文件。想要按照与csv文件中相同的顺序将数据插入到临时表中。我正在尝试BULK INSERT使用:

BULK INSERT ##AllRows
    FROM @FilePath
    WITH
    (
    FIELDTERMINATOR = '\n'
    )
Run Code Online (Sandbox Code Playgroud)

不幸的是,BULK INSERT按随机顺序插入数据。我每次执行的标题都在不同的行中。我在 SQL Server 2016 上运行它。是否有可能在旧版本的 SQL Server 中顺序方式有所不同?

使用该FIRSTROW选项不会将标题识别为文件的第一行。文件没有任何我们可以订购的列。在文件中,标题始终位于第一行。

这可能是巧合,但即使如此FIRSTROW=2,我的标题也有可能出现在表格中。我查了一下。看起来csv文件包含的行数越多,插入到表中的机会就越随机。

sql-server csv bulk-insert

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

是否应该设置一个帐户并仅用于安装 SQL Server?

我想遵循最佳实践。但是,创建一个新的服务帐户(具有最小访问权限且没有特殊权限)然后使用该帐户安装 SQL Server 是否太过分了?

如果我在管理员帐户下进行安装会有什么缺点吗?

旁注:我已经有单独的服务帐户来运行 SQL Server 引擎和 SQL Server 代理服务。

security sql-server installation configuration service-accounts

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

如何调查 Sql Server 选择“错误”索引的原因?

我有一个包含大约 2 亿条记录的事务表,一个主键聚集在 Id 上,还有 2 个索引:

  • IX_SiloId_ChangedTime_IncludeTime
  • IX_SiloId_Time_IncludeContent

在继续实际查询以更新统计信息之前,我运行这两条语句

Update STATISTICS dbo.[Transaction] IX_SiloId_ChangedTime_IncludeTime WITH FULLSCAN
Update STATISTICS dbo.[Transaction] IX_SiloId_Time_IncludeContent WITH FULLSCAN
Run Code Online (Sandbox Code Playgroud)

这是我的查询:

DECLARE @Query SiloTimeQueryTableType -- (SiloId, Time) with primary key clustered on SiloId
INSERT INTO @Query VALUES 
(1, '2020-12-31'), -- 1000 total values, though it's still the same problem with just one

SELECT  t.*
FROM    [Transaction] t
INNER JOIN @Query q
    ON t.SiloId = q.SiloId
WHERE 
    t.Time >= q.Time

Run Code Online (Sandbox Code Playgroud)

现在发生的情况是 Sql Server 选择的原因IX_SiloId_ChangedTime_IncludeTime。然后就需要永远。如果我使用,WITH (INDEX(IX_SiloId_Time_IncludeContent))我会立即得到结果。 …

index sql-server execution-plan

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

兼容性级别和报告的引擎版本

我正在寻求有关 SQL Azure 版本和升级的一些说明。在尝试使用某些特定功能时,我注意到数据库的兼容性级别是 100(我需要 130)。进一步查看后,我发现引擎版本被报告为12.0.2000.8(相当于 SQL Server 2014),但我需要最低引擎版本为 13.x才能使用兼容性级别 130。

我需要做什么来升级此 SQL Azure 实例的引擎版本?在 Azure SQL 数据库中热修补 SQL Server 引擎一文具体指出:

Azure SQL 数据库是常青树,这意味着它始终拥有最新版本的 SQL 引擎

此外,像这样的答案意味着引擎将始终是最新版本,但报告的版本将不正确。

这是否意味着我可以忽略报告的引擎版本并继续设置兼容性级别,或者我需要采取其他步骤来升级引擎?

sql-server database-engine azure-sql-database compatibility-level

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

逻辑读取次数 8KB 超过实例内存

我正在开发 SQL Server 实例并使用 Redgate SQL Monitor。我在前 10 个列表中看到一个执行了 1 次的查询,该查询的逻辑读取量比实例的内存多出约 100 倍,而且查询的持续时间只有几分钟。这怎么可能?我的意思是8KB页面乘以逻辑读取次数怎么会比内存多呢?我不明白是什么?

谢谢

sql-server t-sql

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

重新启动Windows会重新启动SQL Server吗?

重新启动Windows是否也会重新启动SQL Server?

长话短说,我刚刚进行了更改,以便 SQL Server 和 Windows 身份验证用户都可以登录。服务器需要重新启动才能使更改生效,我可以只重新启动计算机而不是服务器吗?

我的服务器存在配置问题,我想更改其中一项设置,以便 SQL 凭据也可以登录(而不仅仅是 Windows 身份验证)。我的管理员说您可以进行任何更改,但不要重新启动 SQL Server。我问我可以重新启动SQL Server所在的Windows服务器吗,他说可以。

重新启动计算机与重新启动 SQL Server 的作用不一样吗?

sql-server windows-server

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

MSSQL 数据库事务日志文件截断的自动化

我正在考虑通过 PowerShell 或任何其他方式设置一个自动化流程,以便在 SQL Server 主机上的磁盘利用率达到 90% 时截断 SQL Server 事务日志文件。

有人有可以做到这一点的代码吗?任何帮助将不胜感激!

注意:我知道这不好,但它仅适用于日志文件

sql-server powershell

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

在下一次执行开始之前,执行计划的每个成员是否都完整运行?

我正在查看执行计划并从右到左阅读它。

例子:

1<-2<-3<-4
      ^
      |_5
Run Code Online (Sandbox Code Playgroud)

所以4和5是并行执行的。当两者都完全完成时,则 3 完全执行,然后 2 完全运行,然后 1。

这是正确的还是可能存在以下情况:

  1. 3 甚至在 4 和 5 完全完成之前就开始执行。

  2. 2 甚至在 3 完全完成之前就开始执行。

sql-server execution-plan sql-server-2019

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

为什么我无法控制 I/O 关联性?

我正在一台机器(不是虚拟机)上运行 2008r2 EE 版本的 SQL Server,该机器具有 4 个插槽的 Intel\xc2\xae Xeon\xc2\xae 处理器 E7-8880 v3,并启用了超线程。我正在尝试验证处理器和 I/O 的关联性,确保我的应用程序可以在更少的内核上运行,因此我手动设置处理器和 I/O 以平衡使用情况,这样就不会同时使用一个内核运营。然而,一旦我到达第三个 NUMA 节点(即 CPU 64),我只能设置处理器关联性的使用,并且 I/O 关联性会变灰。

\n

文档有点令人困惑,因为它引用了 CPU 而不是核心/处理器,但确实引用了必须设置affinity64 选项来控制处理器 33-64,即使在处理器方面似乎可以在即使 I/O 部分不是 UI,也是如此。我没有发现任何内容表明 I/O 只能绑定到系统的前 64 个核心。

\n

我有另一个物理盒子,有两个 CPU 插槽,有 16 个物理核心,启用超线程,每个 CPU 提供 32 个核心。在此服务器上,我能够控制所有核心,无论它们是否是超线程。

\n

为什么我无法在所有 128 个可见核心上设置 I/O 关联性?和超线程有关系吗?

\n

sql-server

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

为什么引擎选择 Index Scan 而不是 Index Seek 进行 Group By 查询?

我有疑问:

SELECT
      M_nvarchar_3
    , MA_nvarchar_40                    
    , W_nvarchar_4
    , LB_nvarchar_2               
    , SUM(ST_decimal_13_3)        
    , SUM(CW_decimal_13_3)
    , SUM(STO_decimal_13_3)    
    , MAX(GJ_nvarchar_7)     
FROM [dbo].[MES]
WHERE L2 = ''
GROUP BY M_nvarchar_3
         , MA_nvarchar_40                    
         , W_nvarchar_4
         , LB_nvarchar_2;
Run Code Online (Sandbox Code Playgroud)

我创建了NONCLUSTERED FILTERED INDEX这样的:

CREATE NONCLUSTERED INDEX IX_M_nvarchar_3_MA_nvarchar_40_W_nvarchar_4_LB_nvarchar_2
ON [dbo].[MES]
(
    M_nvarchar_3 ASC
    , MA_nvarchar_40 ASC
    , W_nvarchar_4 ASC
    , LB_nvarchar_2  ASC
   
)
INCLUDE
(
    ST_decimal_13_3
    ,CW_decimal_13_3
    , STO_decimal_13_3
    , GJ_nvarchar_7
)
WHERE L2 = '';
Run Code Online (Sandbox Code Playgroud)

并在上面的查询中有NONCLUSTERED INDEX SCAN。我想在这种情况下得到了NONCLUSTERED INDEX SEEK。你能给点建议吗?

index sql-server nonclustered-index

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