SQLServer的Replication技术从2005开始,已经变得非常成熟了,而且效果也很好,很多的公司在做读写分离时,都选择了这项技术;Replication现在包括事务、 合并和快照三种,每项都有各自的应用优势,大家用得最多的无疑是事物复制了,这种技术能保证我们发布
SQLServer的Replication技术从2005开始,已经变得非常成熟了,而且效果也很好,很多的公司在做读写分离时,都选择了这项技术;Replication现在包括事务、
合并和快照三种,每项都有各自的应用优势,大家用得最多的无疑是事物复制了,这种技术能保证我们发布端的数据的变更能及时传输到订阅端,网络带宽和服务器配置
如果不差的话,两台机器之间的数据延时是非常小的,这为我们的读写分离技术提供了有力的保障(很少出现用户刚刚新加的数据查不到的现象),不仅分散了读写的压
力,而且在做机器维护时也游刃有余,并且用户体验也得到了比较好的提升,下面我们以事务复制为例,来介绍下创建复制链的技巧。
创建Replication有三种方法:
方法一:使用备份还原的技术
这个方法对数据量比较大,而且停机时间要求非常紧的数据库复制是很好的选择,实现方式很简单,就是在停站的情况下,把我们的发布端的数据库备份,
然后还原到订阅端,这样发布端和订阅端的数据是一致的;然后我们再将同步链建上即可。
不过,这个方法有个要求是,我们把数据还原到订阅端后,需要检查所有的表是否有自增列,如果有自增列,我们需要将自增列改为普通列,方式如下:
1. 在订阅端还原的数据库上查找自增列:
<p><span>--</span><span>查找数据库自增列</span><span><br></span><span>SELECT</span><span><br> 表名</span><span>=</span><span> D.NAME, <br> 列名</span><span>=</span><span> A.NAME,<br> 是否自增</span><span>=</span><span>CASE</span><span>WHEN</span><span>COLUMNPROPERTY</span><span>( A.ID,A.NAME, </span><span>'</span><span>ISIDENTITY </span><span>'</span><span>)</span><span>=</span><span>1</span><span>THEN</span><span>'</span><span>√</span><span>'</span><span>ELSE</span><span>''</span><span>END</span><span>,<br> 主键</span><span>=</span><span>CASE</span><span>WHEN</span><span>EXISTS</span><span>(</span><span>SELECT</span><span>1</span><span>FROM</span><span> SYSOBJECTS </span><span>WHERE</span><span> XTYPE</span><span>=</span><span>'</span><span>PK </span><span>'</span><span>AND</span><span> PARENT_OBJ</span><span>=</span><span>A.ID </span><span>AND</span><span> NAME </span><span>IN</span><span> (<br> </span><span>SELECT</span><span> NAME </span><span>FROM</span><span> SYSINDEXES </span><span>WHERE</span><span> INDID </span><span>IN</span><span>(<br> </span><span>SELECT</span><span> INDID </span><span>FROM</span><span> SYSINDEXKEYS </span><span>WHERE</span><span> ID </span><span>=</span><span> A.ID </span><span>AND</span><span> COLID</span><span>=</span><span>A.COLID))) </span><span>THEN</span><span>'</span><span>√</span><span>'</span><span>ELSE</span><span>''</span><span>END</span><span><br> </span><span>FROM</span><span> SYSCOLUMNS A<br> </span><span>LEFT</span><span>JOIN</span><span> SYSTYPES B </span><span>ON</span><span> A.XUSERTYPE</span><span>=</span><span>B.XUSERTYPE<br> </span><span>INNER</span><span>JOIN</span><span> SYSOBJECTS D </span><span>ON</span><span> A.ID</span><span>=</span><span>D.ID </span><span>AND</span><span> D.XTYPE</span><span>=</span><span>'</span><span>U</span><span>'</span><span>AND</span><span> D.NAME </span><span></span><span>'</span><span>DTPROPERTIES </span><span>'</span><span><br> </span><span>where</span><span>COLUMNPROPERTY</span><span>( A.ID,A.NAME, </span><span>'</span><span>ISIDENTITY </span><span>'</span><span>)</span><span>=</span><span>1</span></p>
结果如下:
2. 将自增列修改成普通列:
方法是先重名了这些表,然后新建同名的表,表结构一样,但是去掉自增列属性,然后将重命名的表数据导入到新表中,完成后我们就得到了没有自增列
的表,然后就可以创建同步链了。
方法二:BCP和TableDiff
BCP结合TableDiff在我们为已有的同步链添加新表,而且要求发布端必须保持在线,并对发布端业务影响最小时是非常好的方法,它的实现步骤如下:
1. 将需要新加到同步链的表结构新建到订阅端;
2. 在发布端准备好BCP导出导入脚本,并将要新加的表通过BCP导出到文件中;
3. 将新表加入到同步链中(可以通过脚本,也可以直接通过可视化界面操作),暂停这条链上同步数据的JOB;
4. 运行BCP导入脚本,将数据导入到订阅端;
5. 用TableDiff比较新表在订阅端和发布端的数据,并补齐差异数据(TableDiff 比较后会自动生成不起差异数据的脚本,在订阅端运行即可);
6. 开启暂停的同步链的JOB,这样就完成了。
整个过程对系统业务影响非常小。
方法三:直接初始化快照
这种方式是最简单的,但是对业务影响非常大,而且耗时也很长,基本不推荐(不过这个方法很多人在用,如果是很小的库还是可以考虑)。

InnoDB使用redologs和undologs确保数据一致性和可靠性。1.redologs记录数据页修改,确保崩溃恢复和事务持久性。2.undologs记录数据原始值,支持事务回滚和MVCC。

EXPLAIN命令的关键指标包括type、key、rows和Extra。1)type反映查询的访问类型,值越高效率越高,如const优于ALL。2)key显示使用的索引,NULL表示无索引。3)rows预估扫描行数,影响查询性能。4)Extra提供额外信息,如Usingfilesort提示需要优化。

Usingtemporary在MySQL查询中表示需要创建临时表,常见于使用DISTINCT、GROUPBY或非索引列的ORDERBY。可以通过优化索引和重写查询避免其出现,提升查询性能。具体来说,Usingtemporary出现在EXPLAIN输出中时,意味着MySQL需要创建临时表来处理查询。这通常发生在以下情况:1)使用DISTINCT或GROUPBY时进行去重或分组;2)ORDERBY包含非索引列时进行排序;3)使用复杂的子查询或联接操作。优化方法包括:1)为ORDERBY和GROUPB

MySQL/InnoDB支持四种事务隔离级别:ReadUncommitted、ReadCommitted、RepeatableRead和Serializable。1.ReadUncommitted允许读取未提交数据,可能导致脏读。2.ReadCommitted避免脏读,但可能发生不可重复读。3.RepeatableRead是默认级别,避免脏读和不可重复读,但可能发生幻读。4.Serializable避免所有并发问题,但降低并发性。选择合适的隔离级别需平衡数据一致性和性能需求。

MySQL适合Web应用和内容管理系统,因其开源、高性能和易用性而受欢迎。1)与PostgreSQL相比,MySQL在简单查询和高并发读操作上表现更好。2)相较Oracle,MySQL因开源和低成本更受中小企业青睐。3)对比MicrosoftSQLServer,MySQL更适合跨平台应用。4)与MongoDB不同,MySQL更适用于结构化数据和事务处理。

MySQL索引基数对查询性能有显着影响:1.高基数索引能更有效地缩小数据范围,提高查询效率;2.低基数索引可能导致全表扫描,降低查询性能;3.在联合索引中,应将高基数列放在前面以优化查询。

MySQL学习路径包括基础知识、核心概念、使用示例和优化技巧。1)了解表、行、列、SQL查询等基础概念。2)学习MySQL的定义、工作原理和优势。3)掌握基本CRUD操作和高级用法,如索引和存储过程。4)熟悉常见错误调试和性能优化建议,如合理使用索引和优化查询。通过这些步骤,你将全面掌握MySQL的使用和优化。

MySQL在现实世界的应用包括基础数据库设计和复杂查询优化。1)基本用法:用于存储和管理用户数据,如插入、查询、更新和删除用户信息。2)高级用法:处理复杂业务逻辑,如电子商务平台的订单和库存管理。3)性能优化:通过合理使用索引、分区表和查询缓存来提升性能。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Atom编辑器mac版下载
最流行的的开源编辑器

Dreamweaver CS6
视觉化网页开发工具

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能