社区首页 >问答首页 >以快速有效的方式传递数百万行的表而不阻塞

以快速有效的方式传递数百万行的表而不阻塞
EN

Database Administration用户
提问于 2017-09-20 02:04:38
回答 3查看 4.3K关注 0票数 2

是否有任何解决方案比简单的INSERT INTO或导出和导入文件更有效地将具有3列的表中的数百万行移动到另一个数据库中的类似表,而不阻塞目标数据库,并且不会丢失在发生故障时可以回滚的事务中的任何记录?

EN

回答 3

Database Administration用户

回答已采纳

发布于 2017-09-20 03:50:11

是否有比简单插入或导出和导入文件更有效的解决方案将数百万行从具有3列的表移动到另一个数据库中的类似表中,

你最好的选择就是SSIS。

而不阻塞目标数据库

插入到一个表中不会阻塞数据库,但它会在某种程度上导致对表的阻塞。阻塞的长度和严重程度将在很大程度上取决于索引的数量以及它们是否适合您的查询。

如果要减少阻塞,请将数据插入较小的块。为了避免锁升级锁升级,我通常一次去1000行左右。

另一种减少阻塞的方法是在读取数据的查询中使用乐观隔离度

以及在发生故障时可以回滚的事务中没有丢失任何记录?

这也是为什么小批是个好主意的另一个原因。它将使您更容易找出违规行,重试事务,等等。

在这篇文章中也有一些巧妙的技巧,由Michael:在线修改表。第1部分:迁移策略撰写。

票数 4
EN

Database Administration用户

发布于 2017-09-20 02:34:20

对于较大的数据集,通常推荐使用涓流提要(增量),但它将取决于您希望运行它的频率和实际的增量卷。

如果您只是希望保持次要副本与主副本保持一致的状态/同步,则可能应该查看复制、日志传送或可用性组。

您还可以使用BCP或SSIS将数据移动到新数据库中--这不会锁定实际的目标表--然后使用分区切换,这将导致目标数据库中的最小锁定。

Kendra有一篇很好的关于分区切换的文章:https://littlekendra.com/2017/01/19/why-you-should-switch-in-staging-tables-instead-of-renaming/

票数 1
EN

Database Administration用户

发布于 2017-09-21 13:21:48

在我的工作中,我们用一个专门开发的C#应用程序做了一个小技巧,每天从我们的Oracle服务器将大约500-600gb的数据移动到我们的,在大约一个小时内,使用大量线程(大约30个线程).逻辑可以在没有太多问题的情况下转移到SSIS (这是因为我们首先在SSIS包xD上测试了性能)

我们打开到源表的N个连接,并修改了select,以便根据数字字段的模块( Oracle中的MOD,SQL Server中的%)筛选行.这个技巧使我们能够同时读取多个线程的单个表(这类似于使用Sqoop将数据导入Hadoop时发生的情况,因为Sqoop使用索引数字字段,并在分配给作业的N个工作人员上拆分读取任务,每个工作人员同时读取不同范围的数据)

例如,您可以简单地连接到同一个表,并将这种查询放到数据流任务中读取数据。

代码语言:javascript
代码运行次数:0
复制
select number_field, varchar_field, date_field from table where (number_field % 10) = 0
select number_field, varchar_field, date_field from table where (number_field % 10) = 1
....
select number_field, varchar_field, date_field from table where (number_field % 10) = 8
select number_field, varchar_field, date_field from table where (number_field % 10) = 9

每个查询将从源表读取不同的数据块,并在目标表上插入,如果使用OLEDB目标,您可以编辑选项以取消选中锁定目标表的选项,并使用低于5000行的批处理大小,因为在5000行以上,行首先在temp db上写入,然后传输到目标表,正如Erik说的,1000行不是一个糟糕的批处理大小。

使用这个技巧,我们将每天10行的表移动到大约5亿行(历史数据.它每天通过OLTP Oracle上运行的一些进程进行更新.我们每天截断目标表并再次读取Oracle中的所有行.这就是为什么我们的过程到达执行的时间)

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/186405

复制
相关文章
02:输出最高分数的学生姓名
02:输出最高分数的学生姓名 查看 提交 统计 提问 总时间限制:1000ms内存限制:65536kB描述 输入学生的人数,然后再输入每位学生的分数和姓名,求获得最高分数的学生的姓名。 输入第一行输入一个正整数N(N <= 100),表示学生人数。接着输入N行,每行格式如下: 分数 姓名 分数是一个非负整数,且小于等于100; 姓名为一个连续的字符串,中间没有空格,长度不超过20。 数据保证最高分只有一位同学。输出获得最高分数同学的姓名。样例输入 5 87 lilei 99 hanmeimei 97 lil
attack
2018/04/03
2.3K0
你真的懂分数吗?(一)——分数的数学结构和建模
我们小学就学过分数,是指的形如“a / b”的,表达把某对象平均分成b份中的a份那么多的含义的数。自然地,a, b一般都是整数,b != 0;如果a,b仍然是分数的话,也可以等价变形成是整数的式子;如果其中有负整数,则表达的方向概念和整数相同,并且依然负负得正;它和原来的整数一起构成有理数,可以一起参与四则运算满足交换结合分配率。
magic2728
2023/09/09
3530
你真的懂分数吗?(一)——分数的数学结构和建模
你真的懂分数吗?(二)——分数模型应用初探
但是,这样的分数是定义在教科书层面的基本定义,就像字典不可能囊括语言的所有用法一样,它也无法给出分数的所有用法。而在实际数学使用中,还有诸多近似和一些使用习惯值得去理解,就像学一门语言一样。今天我们就基于分数的数学模型,来看如何把教科书上的数学用到生活中。
magic2728
2023/09/09
2360
你真的懂分数吗?(二)——分数模型应用初探
你真的懂分数吗?(三)——带分数到小数到百分数
在实际场景中,在均匀分割假设成立的情境下,很多时候分的不是一个单元,大概率结果不是真分数,因此就存在大于1的分数的表达问题。我只有知道2个人分5个蛋糕是每人2 + 1 / 2个蛋糕,才能帮助我给一人2个,再把最后一个对半切开各自拿一个这个结论,这恰好源自带分数的使用场景。这远比其5 / 2的原始表达式有用,因为按照定义,那需要把5个蛋糕全切了才能分得清。
magic2728
2023/09/18
3540
你真的懂分数吗?(三)——带分数到小数到百分数
C语言实现录入学生信息并按分数排序输出
需求 实现在控制台录入学生姓名和分数 使用冒泡排序法将录入的信息按分数从大到小输出 分析 根据需求将按照以下步骤来实现 定义学生结构体,结构体成员包含学生的姓名和分数 定义结构体数组存放学生信息 用冒泡排序法将录入的信息按分数从大到小排序 循环遍历排序后的结构体数组的信息 代码实现 student.h #include <stdio.h> typedef struct student { char name[20]; int score; }stu; static void add_st
C语言中文社区
2022/05/31
8050
C语言实现录入学生信息并按分数排序输出
2022-11-23: 分数排名。输出结果和表的sql如下。请写出输出结果的sql语句? +-------+------+ | score | rank | +
2022-11-23: 分数排名。输出结果和表的sql如下。请写出输出结果的sql语句?
福大大架构师每日一题
2022/11/23
8540
2022-11-23: 分数排名。输出结果和表的sql如下。请写出输出结果的sql语句? +-------+------+ | score | rank | +
cdr如何画分数、替代分数
今天群里有一位网友提问:谁知道cdr里面最后一个替代分数怎么弄?,尝试多种方法无果 打开cdr软件看了一下,鼠标放上去有一个提示 解决方法找一个适用的字体即可。如Kozuka Gothic Pr6N
2022/10/31
9160
cdr如何画分数、替代分数
你真的懂分数吗?(五)——概率与期望
今天,我们进入本系列最后一篇,来看看在一般的随机变量的概率描述中,分数是怎么建模,如何起作用的。
magic2728
2023/09/24
2830
你真的懂分数吗?(五)——概率与期望
相对分数和绝对分数
CLICK ON THE BLUE WORDS ABOVE TO FOLLOW US
不可言诉的深渊
2022/11/11
7140
相对分数和绝对分数
Python 格式化输出 —— 小数转化为百分数
rate = .1234 print(‘%.2f%%’ % (rate * 100)) 1 2 第一个百分号和 .2f 相连,表示浮点数类型保留小数点后两位格式化输出; 然后的两个连续的%%,则最终会输出一个%号出来,有对%进行转义的含义; 将小数(数值)转化为字符串,并赋给其他变量:
kirin
2021/04/30
2.6K0
分数相加[通俗易懂]
本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和也必须是有理数的形式。
全栈程序员站长
2022/09/20
1.2K0
分数排名
1)rank函数:这个例子中是5位,5位,5位,8位,也就是如果有并列名次的行,会占用下一名次的位置。比如正常排名是1,2,3,4,但是现在前3名是并列的名次,结果是:1,1,1,4。
袁新栋-jeff.yuan
2020/08/26
2.1K0
分数排名
你真的理解LDO的输出电容吗!?
LDO的输出要加一个电容,大部分人解释是为瞬间负载电流提供能量,减小输出纹波。
工程师看海
2022/06/23
5.2K0
你真的理解LDO的输出电容吗!?
你真的懂分数吗?(四)——赌博与赔率
说到比1小的数,不得不提概率公理中所谓的sigma代数上的归一化测度。这个归一化测度,就是强行在样本空间上使得大家和为1,然后每个正数概率值自然就是[0, 1]的实数了,也可以用小数近似表达来使用。
magic2728
2023/09/18
3070
你真的懂分数吗?(四)——赌博与赔率
如果RNA的预后分数被做过了!你可以试试这样
今天和大家分享的是19年11月发表在Annals of Translational Medicine (IF:3.297)杂志上的一篇文章,“DNA methylation-based prognostic biomarkers of acute myeloid leukemia patients”,本篇文章先对DNA甲基化和基因表达进行了差异分析,鉴定了急性髓细胞性白血病中的关键表观遗传基因。然后进行了KEGG和GO分析,PPI网络构建和模块分析,并使用SurvExpress分析获取得分最高模块的基因,构建了基于3个关键基因的预后模型,在癌症数据集中进行生存分析和风险评估。最后,用MethSurv分析探索了与AML生存相关的甲基化生物标志物。
科研菌
2020/09/24
9150
如果RNA的预后分数被做过了!你可以试试这样
[LeetCode Weekly Contest 90]856.括号的分数
不包含任何内容的括号()得一分,事实上我们可以将()替换为1,这样题目就变成了1得一分,并列的部分得分相加,括号内的部分得分乘以2,四个示例就转换为了:
杜逸先
2018/06/26
1.1K4
【Java 基础篇】Java 标准输出流详解:输出你的程序之美
Java 编程中,标准输出流是一个重要的概念。它允许我们将程序的输出信息显示在终端或控制台上,这对于调试、用户界面和与用户的交互非常重要。在这篇文章中,我们将深入探讨 Java 的标准输出流,了解如何使用它以及一些常见的用法和技巧。
繁依Fanyi
2023/10/12
7620
【Java 基础篇】Java 标准输出流详解:输出你的程序之美
为什么你的LDO输出不稳定?
前一阵朋友和我说当初用某型号LDO时,发现输出异常,仔细阅读datasheet后,更换输出电容解决。
工程师看海
2022/06/23
1.1K0
为什么你的LDO输出不稳定?
如何让你的工作能够大量输出
从结果导向来看,我们所做的事情一定要有一个明确的目标和意义,在思考了一段时间之后,发现我们很多人做事情的范围太窄,或者太局限,运维方向本来就很难得到认可,如果你和业务方打不到一片,如果单单认为做好自己的事情就好了,运维价值是难以体现的。
jeanron100
2019/06/18
1.1K0
如何让你的工作能够大量输出
听说你对 JavaScript 中的输出挺熟?
在 JavaScript 中,不像 Java 等语言,它没有任何打印或者输出方法的,通常使用如下 4 种方式来输出数据。
村雨遥
2022/03/14
4380
听说你对 JavaScript 中的输出挺熟?

相似问题

把你的方法迭代到一个分数

90

我双倍的源,你双倍的输出!

1090

我反转源代码,你否定输出!

520

你知道你的KVZ吗?

70

你学过你的谎言吗?

80
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文