无需直接应用程序访问即可加速 SQL Server 的批量插入?

问题描述 投票:0回答:1

我有一个采用专有编程语言的应用程序。数据库访问通过与 SQL Server 2019 的 ODBC 连接进行处理。应用程序中有一个用例,其中使用准备好的语句将数千个插入转储到同一个表中。 不幸的是,我无法更改插入本身,因为应用程序的对象关系映射处理插入,这是一个“黑匣子”。 我唯一的选择就是为这些插入物的茁壮成长提供理想的环境。 表格的布局如下:

CREATE TABLE [dbo].[CostTable](
    [Deleted] [bit] NOT NULL,
    [TimeEntry] [datetime] NOT NULL,
    [UserEntry] [int] NOT NULL,
    [GUID] [varchar](50) NOT NULL,
    [Costs1] [decimal](18, 2) NULL,
    [Costs2] [decimal](18, 2) NULL,
    [Costs3] [decimal](18, 2) NULL,
[Costs4] [decimal](18, 2) NULL,
[Costs5] [decimal](18, 2) NULL,
[Costs6] [decimal](18, 2) NULL,
[Costs7] [decimal](18, 2) NULL,
 CONSTRAINT [PK_CostTable] PRIMARY KEY NONCLUSTERED 
(
    [GUID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

该表还应用了一些索引。 不幸的是,我无法更改主键的格式,并且该值本身是由应用程序创建的。它是一个字母数字键。数字键很可能会更好,但我不能这样做。 关闭检查约束并在所有插入后将其打开是否有帮助? 还有其他选择吗? 我可以在 ODBC 驱动程序中调整什么吗?我使用的是 SQL Server Native Client 11.0。 ODBC 驱动程序可以根据需要进行更改。

sql sql-server odbc query-optimization bulk-load
1个回答
0
投票

您可以修改数据库和表的配置和结构以加快相同的应用程序过程。

检查中

应用程序可能会在写入表之前通过一些查询计算其他表中的一些值。这些查询可能需要优化。

在批量加载过程之前,请使用 Sql Profiler 调查应用程序向 Sql Server 发送的内容。然后看看哪些步骤需要更长的时间

批量加载优化

如果这些是一次性作业或计划作业,则要优化插入速度。

1.)

Take a full backup
。 释放事务日志分配的空间。

2.) 改变

recovery model to Simple
.

3.) 检查日志和数据库文件的大小。 512, 1024 MB 如下图所示。

这会降低

Increase the Autogrowth

生长频率
在预定的过程之后,您可以设置一个理想的磁盘值。假设为 256 MB。

enter image description here 4.)

database - transaction log file

,主键除外。

5.) 

Disable all indexes

无支票。

6.) 在 Sql Server 中,不要将所有内容都放在同一个磁盘/驱动器中。

Disable all constraint

如果可以的话,将临时数据库文件添加到单独的专用快速磁盘中。

    

© www.soinside.com 2019 - 2024. All rights reserved.