在 SQL Server 2014 Developer 中生成 20 亿行的有效方法

2023-12-21

长话短说;我正在测试一个通过网络连接从表中清除条目的系统,预计该功能最多可处理超过 20 亿个条目。

我需要对此进行压力测试才能确定。

这是我的测试脚本(最多可以在十分钟内生成 980 万个。)

DECLARE @I INT=0

WHILE @I <2000000001
BEGIN
    INSERT INTO "Table here"
    VALUES(@I)  

    SET @I=@I+1
END

任何人都可以提出任何建议,或者让我了解在这种情况下我的测试环境的上限可能是什么?


下面是批量10M使用CROSS JOIN的方法。在我的台式机上,大约 6 分钟就加载了 20 亿行。

--create and load 2B row table using cross join CTE source
CREATE TABLE dbo.TableHere(
    ID int NOT NULL
);

DECLARE
      @TargetRowCount int = 2000000000
    , @RowsInserted int = 0;

WHILE @RowsInserted < @TargetRowCount
BEGIN

    WITH 
         t10 AS (SELECT n FROM (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) t(n))
        ,t1k AS (SELECT 0 AS n FROM t10 AS a CROSS JOIN t10 AS b CROSS JOIN t10 AS c)
        ,t10m AS (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 0)) AS num FROM t1k AS a
        CROSS JOIN t1k AS b CROSS JOIN t10 AS c)
    INSERT INTO dbo.TableHere WITH(TABLOCKX)
        SELECT num + @RowsInserted
        FROM t10m;

    SET @RowsInserted += @@ROWCOUNT;

    DECLARE @CurrentTimestampString varchar(1000) = FORMAT(SYSDATETIME(),'yyyy-MM-dd HH:mm:ss');
    RAISERROR('%s: %d of %d rows inserted', 0, 0, @CurrentTimestampString, @RowsInserted, @TargetRowCount) WITH NOWAIT;

END;
GO

考虑创建一个具有增量值的永久统计表。这不仅会提高测试数据生成的性能,而且可以重用物化计数表来促进各种其他常见任务,例如生成增量值范围、日期时间序列等。

通过避免每次迭代都重复交叉联接,利用计数表将我的机器的性能提高了 30%(4.5 分钟)。EDIT:处理器升级后缩短至 2.5 分钟(英特尔 i9-12900K 处理器)。

SET NOCOUNT ON;
--create and load 10M row tally table
DROP TABLE IF EXISTS dbo.Tally;
CREATE TABLE dbo.Tally(
     Num int NOT NULL CONSTRAINT PK_Tally PRIMARY KEY
);
WITH 
     t10 AS (SELECT n FROM (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) t(n))
    ,t1k AS (SELECT 0 AS n FROM t10 AS a CROSS JOIN t10 AS b CROSS JOIN t10 AS c)
    ,t10m AS (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 0)) AS num FROM t1k AS a
    CROSS JOIN t1k AS b CROSS JOIN t10 AS c)
INSERT INTO dbo.Tally WITH(TABLOCKX) (Num) 
    SELECT num 
    FROM t10m;
ALTER INDEX PK_Tally ON dbo.Tally REBUILD WITH (FILLFACTOR=100);
GO

--create and load 2B row table using tally table source
CREATE TABLE dbo.TableHere(
    ID int NOT NULL
);

DECLARE
      @TargetRowCount int = 2000000000
    , @RowsInserted int = 0;

WHILE @RowsInserted < @TargetRowCount
BEGIN

    INSERT INTO dbo.TableHere WITH(TABLOCKX) (ID)
        SELECT Num + @RowsInserted
        FROM dbo.Tally;

    SET @RowsInserted += @@ROWCOUNT;

    DECLARE @CurrentTimestampString varchar(1000) = FORMAT(SYSDATETIME(),'yyyy-MM-dd HH:mm:ss');
    RAISERROR('%s: %d of %d rows inserted', 0, 0, @CurrentTimestampString, @RowsInserted, @TargetRowCount) WITH NOWAIT;

END;
GO
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 SQL Server 2014 Developer 中生成 20 亿行的有效方法 的相关文章

  • 在表单提交时触发谷歌分析事件

    我正在尝试将分析事件跟踪添加到 onclick 事件中 以便在表单上提交输入 我尝试了多个不同的示例 并参考了几个不同的 SO 帖子来达到这一点 我可以通过 onclick 来提交表单或触发跟踪事件 但不能同时执行两者 第一个例子 向控制台
  • 负载测试软件[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 Google Analytics trackPageview() 跟踪外部链接不起作用

    我已将外部链接跟踪设置为 Google Analytics 中的目标 根据 这是有问题的页面 http playmoreatthey org http playmoreatthey org 页面上的外部链接的格式如下 a href http
  • 获取 Sitecore 中单个页面的个人资料关键分数

    我有关于 Sitecore Analytics 和用户个人资料密钥的问题 我需要能够获取单个页面的配置文件密钥的分数 例如 如果我有一个名为 traveler 的个人资料键 该键在给定页面上的值为 1 10 那么我需要能够获取内容作者分配的
  • 删除所有空格并将 SQL 中的多行合并为单行

    在 SQL Server 2014 中删除字符串中所有空格的最佳方法是什么 我的字符串是 Maximize your productivity for building engaging beautiful web mapping appl
  • SQL Server Management Studio 2014:无法查看 Azure SQL 数据库 V12 上的存储过程

    我已将 SQL Server Management Studio 更新到撰写本文时的最新版本 12 0 4432 0 这是带有 CU3 的 SP1 和其他错误修复 我的 Azur SQL 数据库版本是 12 0 2000 8 我无法通过 G
  • 启动 Facebook 转换像素

    我对 Javascript 还很陌生 但我想知道在不实际加载 确认 谢谢 页面的情况下触发 Facebook 转换像素 如下 的最佳方法是什么
  • ASP.NET 应用程序的压力和性能测试

    我想对 ASP NET 应用程序的前端进行压力和性能测试 我的目标是 识别瓶颈 了解HTTP请求的数量和负载 轻松确定正在使用 Expires 标头和 或进行 gzip 压缩的组件 找出在哪里增加下载并行化 找到重复的脚本和不必要的重定向
  • Google Analytics with jQuery - 在标签中显示路径名

    我已经创建了跟踪 效果很好 如下所示 a external click function gaq push trackEvent Exit Links Click this attr href a href http example com
  • 跟踪App Store下载源

    有没有办法追踪App Store的下载源 例如 如果我在应用程序的 Facebook 页面上发布链接 我可以知道有多少人通过该链接下载了我的应用程序吗 感谢您的回答 是的 您可以使用 Apple App Analytics 的活动链接来跟踪
  • 相当于 VB.NET 中的 MoveNext

    由于 Recordset MoveNext 函数在 VB NET 中不再可用 在互联网上搜索了很多 我想要一种方法来解决我的问题 使用 MSSQL 刚刚在 SQLDATASET 不支持的地方看到 movenext 函数 我想使用类似于 Mo
  • 请参阅调试目的的 Firebase 网络流量

    我希望能够使用 Charles Proxy 调试 firebase 分析 我无权访问源代码 因此无法在 Firebase 中启用调试视图 我想要跟踪网络流量 以便能够使用 Firebase Analytics 数据的 Charles 代理查
  • jQuery.on('click') 在 jQuery.click 之前?

    我有一个外部脚本 我无法修改它 该脚本加载一个 a 按钮 并添加一个 jQuery 单击它 并以 return false 结束 我需要在这次点击时触发我自己的代码 当我加载页面时 a 不存在 所以我需要使用 on click 绑定 活 但
  • 如何通过添加像素跟踪来跟踪各个收件人的阅读状态

    我正在构建一个电子邮件应用程序 其功能是在发送电子邮件后查看已读收件人 例如 如果我向 P1 发送了一封电子邮件并抄送 P2 和 P3 那么当 P1 打开电子邮件时 我作为发件人应该能够看到 P1 阅读了他们的电子邮件 为了实现这一目标 我
  • 最高连续出现次数的总和

    我有一个包含三列的表 lending id int installment n serial int status text 我想知道如何检索最大的差距WAITING PAYMENT status 对于每个贷款 id 对于以下示例 lend
  • SQL Server 2014:相同虚拟机的不同性能(巨大的“执行次数”)

    I have 2 个相同的虚拟机 16 个 vCPU RAM 64GB 具有相同的数据库 相同的表和视图以及相同的行数 View1 有 470 万行 在 VM1 UAT 上SELECT TOP 1000 FROM View1不到 1 秒即可
  • 我可以使 SQL Server FORMAT 具有确定性吗?

    我想制作一个返回整数形式的 UDFYYYYMM这样我就可以轻松地按月划分一些东西 我试图将此函数分配给 a 的值PERSISTED计算列 我目前有以下内容 效果很好 CREATE FUNCTION dbo GetYearMonth pDat
  • 将开始列和结束列合并为一列

    我已经上下搜索了好几个星期 试图找到解决我的问题的方法 我的问题如下 A 有一个表格 其中包含来自车辆遥测提供商的开始和结束坐标以及日期 我需要将它们合并到一列中 以便我们的报告解决方案能够绘制它们 一些示例数据如下 DECLARE Tbl
  • 如何使用jmeter统计失败的请求

    我在跑步JMeter我想要统计所有失败的请求 这些请求要么超时 要么只是失败 我看到一些侦听器显示出现了失败 但没有人看到有一个字段显示失败请求与成功请求的总数 有谁知道我如何轻松获取这些数据而不必手动计算每次失败 要检查失败响应的数量 请
  • 使用 Google Analytics 4 自动增强测量事件时报告 Data Studio 中的下载 URL?

    我设置了一个新的 Google Analytics 4 属性并启用了增强跟踪 它会自动记录所有下载 使用 Google Data Studio 时 我可以看到 file download 事件 因此它肯定有效 并使用此数据来构建我的报告 我

随机推荐

  • 我如何知道目录中的哪些文件不在我的 SVN 存储库中?

    瓷砖正是我的问题 编辑掉错误的代码 你可以使用svn状态 http svnbook red bean com en 1 2 svn ref svn c status html命令 如果您没有设置忽略属性 文件将显示为 字首
  • 启用详细日志记录的更简单方法

    我想添加一个调试打印语句测试 如果我启用 verbose从命令行 如果我的脚本中有以下内容 logger info test 我经历了以下问题 但无法得到答案 如何在脚本中实现 verbose 或 v 选项 https stackoverf
  • Google 应用程序引擎部署失败 - 查找“pip”的模块规范时出错(AttributeError:模块“__main__”没有属性“__file__”)

    我们正在使用命令提示符c gcloud app deploy app yaml 但出现以下错误 Running python3 m pip install requirement requirements txt upgrade upgra
  • 如何在 C/C++ 中将非 ASCII 字符注入字符串文字

    我有一个读取字符数组的程序 我需要内存中字符串的值等于十六进制 0x01020304 它们都是非 ASCII 字符 所以问题是 如何在运行时将非 ASCII 字符传递到字符串文字变量中 使用转义序列 确保按正确的顺序放置字符 x01 x02
  • 为 EF-db-first 设置 mvc-mini-profiler

    我正在尝试将迷你分析器与旧式 EF 代码一起使用 数据库优先 So far 我使用以下命令创建了数据库上下文 string connectionString GetConnectionString var connection new En
  • 使用 Django 文件上传

    我正在使用ajax上传 http valums com ajax upload 代码执行简单的 AJAX 文件上传 我遇到的问题是提交后文件没有显示在后端 前端代码非常基本 div Upload More Images div
  • 如何将 geojson 文件的内容分配给 Javascript 中的变量?

    显示的代码已经可以工作 但我想清理它 它声明了一个名为placez其中包含 geojson 格式的信息 供代码的下一部分使用过滤器读取和加载到地图上 但实际上 要映射的点数量超过 50 000 个 此处示例仅显示 2 个 我想知道的是如何加
  • 如何使用 cut 为分隔符指定更多空格?

    有什么方法可以使用 cut 命令指定更多空格的字段分隔符吗 如 例如 在下面的字符串中 我想达到值 3744 我应该说什么字段分隔符 ps axu grep jboss jboss 2574 0 0 0 0 3744 1092 S Aug1
  • VSTS 代理从本地网络共享下载工件非常慢

    我正在运行一个带有两个代理的本地 TFS 实例 代理 1 有一个本地路径 用于存储我们的工件 代理 2 必须通过网络路径 agent1 artifacts 访问该路径 从代理 1 下载工件需要 20 30 秒 从代理 2 下载工件需要 4
  • 将字符串转换为数学计算[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 好吧 所以我想做的就是使用一个字符串作为输入 例如 16 12 25 将其转换为计算机可以理解的数学评估
  • Spring @Transactional 在 @Bean 声明上而不是类实现上

    我想从 Spring 配置 事务 bean Configuration类而不是注释类实现本身 Transactional 有点像老式的方式 从 XML 文件配置事务建议 但不需要对我的类 方法名称的字符串引用来创建切入点 原因是bean实现
  • 计算两个条件是否匹配 - EXCEL 公式

    我有这个表 我想创建一个公式 该公式将根据列中的真实条件对值进行计数A and column C 例子 如果在列中A值为 M 男性 在列中C是YES 那么就算了 谁能帮我用这个公式吗 在单元格前面添加工作表名称 例如 COUNTIFS st
  • PDO 查询返回大量 \uXXXX 字符代码,我无法将其转换为 unicode 字符

    我有一个 MySQL 数据库表 其中存储了不同语言的国家 地区名称 但无法以 unicode 字符显示数据 我只能在特殊字符应该显示的位置显示 uXXXX 代码 该查询在 AJAX 请求中使用 结果编码为 JSON 对象 这是表格 截断 C
  • 超级开发模式的多个源文件夹

    Problem 只要通过 src根据需要多次 src src src widgets 这些模块位于命令行的最后 并在所有源文件夹和类路径中查找 src src src widgets com my Project MyProject 请注意
  • 在 C++ 中创建列表的列表[重复]

    这个问题在这里已经有答案了 在 C 中 创建特定大小的列表 其中列表的每个元素都是 3 个元素的列表 的推荐方法是什么 Analogy 为了澄清这一点 Python 中我想要做的类比如下 最简单 n 10 ls 0 0 0 for i in
  • 在 C++ 中读取二进制文件而不将整个文件缓冲到内存中

    为了制作二进制比较器 我尝试使用 CreateFileW 函数读取两个文件的二进制内容 然而 这会导致整个文件被缓冲到内存中 这对于大文件 500MB 来说是一个问题 我已经四处寻找其他函数 这些函数可以让我只缓冲文件的一部分 但我没有找到
  • 如何修复 Visual Studio 中的 LNK1104 错误?

    首先 请允许我向您介绍一些背景知识 我正在尝试模仿我童年的游戏 在这方面已经做了很多工作模拟上述游戏 https github com VanaDev Vana 并且我通过 Windows 设置指南取得了一些不错的进展 可以找到here h
  • 有APL的开源实现吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 我应该“始终”同步对多个线程使用的所有双字段/属性/变量的访问吗?

    注意我倾向于编写无锁代码 因此我会尽可能避免任何类型的锁 相反 我只是使用while true 循环 因为我有很多CPU能力 据那http msdn microsoft com en us library aa691278 28VS 71
  • 在 SQL Server 2014 Developer 中生成 20 亿行的有效方法

    长话短说 我正在测试一个通过网络连接从表中清除条目的系统 预计该功能最多可处理超过 20 亿个条目 我需要对此进行压力测试才能确定 这是我的测试脚本 最多可以在十分钟内生成 980 万个 DECLARE I INT 0 WHILE I lt