设为首页 收藏本站
查看: 791|回复: 0

[经验分享] 複寫時候啟動In-Memory轉換功能

[复制链接]
累计签到:91 天
连续签到:1 天
发表于 2016-8-9 12:21:24 | 显示全部楼层 |阅读模式
打從SQL Server 2000開始,一直都在摸索與使用SQL Server Replication,都是藉由交易式複寫的方式,進行單向資料同步。截至到SQL Server 2008 R2時候,就開始使用到Peer-To-Peer雙向交易式同步的機制,讓發行者與訂閱者之間,可以互相更新進而互相同步。唯一值得一提就是,借用Peer-To-Peer的雙向同步,可以實作出美國跨越洲際到日本的雙向同步,僅需要2-3 sec秒內就可以完成例行交易資料。而當時間來到SQL Server 2016的時候,在一次偶而的狀況下,看到一個MSDN的說明,https://msdn.microsoft.com/en-us/library/dn600379.aspx,當下就直覺想到,將現有的系統升級到SQL Server 2016之後,原封不動去使用SQL Server 2016的高速引擎,並且不升級現有的資料庫到In-Memory的資料庫與資料表型態。反倒是可以利用MSDN短短所提的方式,將重要的資料表複寫過去到訂閱者端的時候,再讓複寫機制協助自動轉換成In-Memory Optimized 資料表。這樣一來,幾乎可以讓原先訂閱者端查詢Disk-Based的資料表情況,躍升去直接查詢由Replication協助產生的In-Memory Optimized 資料表。 Awesome. J
以下就是SQL Server 2016 Replication轉換Disk-based 資料表到In-Memory Optimized 資料表的簡易說明(https://msdn.microsoft.com/en-us/library/ms173857.aspx )。
發行者Disk-based Tables(Article) à sp_addarticle+@schema_option=0x40000000000 à散發者 à 訂閱者à In-Memory Optimized 。
當然第一眼看到這樣的網路拓樸,要學會設定是有一定的難度,所以以下將簡易的設定步驟取出,分享給大家進行實作。
步驟一、建立disk-based的發行集
  
步驟二、新增訂閱。
完成上述的作業後,就可以進行訂閱者設定。
In-Memory Database


過程中可以將精靈作業動作,轉換成T-SQL,分別有加入發行集與新增訂閱兩個T-SQL供大家參考。
--從TSQL2014的Disk based資料表,建立發行集
use [TSQL2014]
exec sp_addpublication @publication = N'trxDisk2Memory', @description = N'來自發行者 ''MIA-SQL2016D'' 的資料庫 ''TSQL2014'' 交易式發行集。', @sync_method = N'concurrent', @retention = 0, @allow_push = N'true', @allow_pull = N'true', @allow_anonymous = N'true', @enabled_for_internet = N'false', @snapshot_in_defaultfolder = N'true', @compress_snapshot = N'false', @ftp_port = 21, @allow_subscription_copy = N'false', @add_to_active_directory = N'false', @repl_freq = N'continuous', @status = N'active', @independent_agent = N'true', @immediate_sync = N'true', @allow_sync_tran = N'false', @allow_queued_tran = N'false', @allow_dts = N'false', @replicate_ddl = 1, @allow_initialize_from_backup = N'false', @enabled_for_p2p = N'false', @enabled_for_het_sub = N'false'
GO
exec sp_addpublication_snapshot @publication = N'trxDisk2Memory', @frequency_type = 1, @frequency_interval = 1, @frequency_relative_interval = 1, @frequency_recurrence_factor = 0, @frequency_subday = 8, @frequency_subday_interval = 1, @active_start_time_of_day = 0, @active_end_time_of_day = 235959, @active_start_date = 0, @active_end_date = 0, @job_login = null, @job_password = null, @publisher_security_mode = 0, @publisher_login = N'miareplicate', @publisher_password = N''
--這部分最重要就是@schema_option選項,需要加入0x40000000000
use [TSQL2014]
exec sp_addarticle @publication = N'trxDisk2Memory', @article = N'Categories',
@source_owner = N'Production', @source_object = N'Categories', @type = N'logbased',
@description = N'', @creation_script = null, @pre_creation_cmd = N'drop',
@schema_option = 0x00000C000803508F,
@identityrangemanagementoption = N'manual',
@destination_table = N'Categories', @destination_owner = N'Production',
@vertical_partition = N'false',
@ins_cmd = N'CALL sp_MSins_ProductionCategories',
@del_cmd = N'CALL sp_MSdel_ProductionCategories',
@upd_cmd = N'SCALL sp_MSupd_ProductionCategories'
GO
--使用T-SQL建立訂閱者資訊,其中最重要就是標記的選項@memory_optimized
-----------------開始: 在發行者 'MIA-SQL2016D' 端執行的指令碼-----------------
use [TSQL2014]
exec sp_addsubscription @publication = N'trxDisk2MemoryTables', @subscriber = N'MIA-SQL2016D', @destination_db = N'HKDB', @subscription_type = N'Push', @sync_type = N'automatic', @article = N'all', @update_mode = N'read only', @subscriber_type = 0, @memory_optimized = 1
exec sp_addpushsubscription_agent @publication = N'trxDisk2MemoryTables', @subscriber = N'MIA-SQL2016D', @subscriber_db = N'HKDB', @job_login = null, @job_password = null, @subscriber_security_mode = 0, @subscriber_login = N'miareplicate', @subscriber_password = null, @frequency_type = 64, @frequency_interval = 0, @frequency_relative_interval = 0, @frequency_recurrence_factor = 0, @frequency_subday = 0, @frequency_subday_interval = 0, @active_start_time_of_day = 0, @active_end_time_of_day = 235959, @active_start_date = 20160808, @active_end_date = 99991231, @enabled_for_syncmgr = N'False', @dts_package_location = N'Distributor'
GO
-----------------結束: 在發行者 'MIA-SQL2016D'  端執行的指令碼-----------------
有關【exec sp_addarticle】中的【@schema_option = 0x00000C000803508F】是否加入【0x40000000000,可以從以下的陳述式進行檢查。
--使用T-SQL檢查【exec sp_addarticle】中的【@schema_option = 0x00000C000803508F】是否加入【0x40000000000】
declare @intermediate  varbinary(8)
SET @intermediate= cast(cast(0x00000C000803508F as bigint) & 0x40000000000 as binary(8))
                          
select @intermediate
GO
--結果
0x0000040000000000

步驟三(Optional)、檢查目的In-Memory資料庫中是否已經完成In-Memory Optimized 資料表的同步
另外可以開啟複寫監視器,檢視整個ReplicationDisk Based DatabaseIn-Memory database的狀況。
結論
複寫(Replication)基本上是一個大家又愛又怕的資料庫高可用度方式,因為其中隱藏很多設定技巧。這次的案例非常適用於企業升級SQL Server2016版本之後,無法將整個資料庫或是所有資料表,一併升級到In-Memory Optimized tables的情境下,可以藉由Replication的機制,將重要且常查詢的資料表,經由複寫轉換成In-Memory Optimized的形式,加入其他應用程式的查詢,藉由實作出效能提升到4-30X的效果。

複寫時候啟動In-Memory轉換功能.zip

992.19 KB, 下载次数: 0


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-255324-1-1.html 上篇帖子: SQL Server查看连接数 下篇帖子: INT與BIGINT的使用時機
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表