MSSQL订阅库索引对齐
需求如下图:

在原来的架构中是每台web服务器都固定访问某一台数据库服务器,所以就造成了每台数据库订阅服务器上的索引不一致。现在的需求就是要把所有的订阅库上的索引调整为一致,为了就是实现高可用+负载均衡。原因是因为订阅库出现过硬盘故障,导致部分的应用无法访问了。
思路比较简单粗暴
1、把数据库中所有的索引信息提取出来
SELECT OBJECT_NAME(i.[object_id]) tblname
, i.name Index_name
, i.index_id
, i.type_desc Index_Type
, c.name ColName
, ic.index_column_id index_column_id
, ic.is_included_column is_included_column
, i.is_unique
, i.fill_factor
, i.filter_definition
INTO DBName_Index_Align_192_168_10_2_V1
FROM sys.indexes i
LEFT OUTER JOIN sys.index_columns ic ON i.index_id = ic.index_id AND ic.[object_id] = i.[object_id]
LEFT OUTER JOIN sys.[columns] c ON c.[object_id] = i.[object_id] AND c.column_id = ic.column_id
ORDER BY OBJECT_NAME(i.[object_id])
2、匹配所有的索引(这步比较耗时耗力,相当于重新把所有的库做了一次调优)
2.1、先用192.168.10.2跟192.168.10.3做匹配,把两个库的索引调整成一致
2.2、再用192.168.10.2跟192.168.10.4做匹配,把在192.168.10.2上的调整同时调整到192.168.10.3上。
2.3、若是还有更多的订阅库,就一直使用192.168.10.2来作为匹配的对象,把在此数据库上做的调整同时更新更已经匹配过的订阅数据库上。
# 使用以下的代码来匹配
SELECT *
FROM (
SELECT ia.tblname tblname, ia.Index_name, ia.ColName, ia.index_column_id, ia.Index_Type ,
ia.is_included_column, ia.filter_definition ,
ia2.tblname cmp_tblname, ia2.Index_name cmp_Index_name, ia2.ColName cmp_ColName, ia2.index_column_id cmp_index_column_id,ia2.Index_Type cmp_Index_Type,
ia2.is_included_column cmp_is_included_column, ia2.filter_definition cmp_filter_definition
FROM DBName_Index_Align_192_168_10_2_V1 ia
FULL JOIN DBName_Index_Align_192_168_10_3_V1 ia2 ON ia.tblname = ia2.tblname
AND ia.Index_name = ia2.Index_name
AND ia.ColName = ia2.ColName
AND ia.index_column_id = ia2.index_column_id
AND ia.is_included_column = ia2.is_included_column
) t
WHERE ISNULL(t.tblname , t.cmp_tblname) NOT IN ('索引名称')
AND ISNULL(t.Index_Type , t.cmp_Index_Type) <> 'HEAP'
ORDER BY ISNULL(t.tblname , t.cmp_tblname), ISNULL(t.Index_name , t.cmp_Index_name) , ISNULL(t.index_column_id , t.cmp_index_column_id)
注:这种方法虽然实现比较初级的高可用和负载均衡,但存在以下弊端
1、因为索引必须对齐,所以在部分的订阅库中也建立了一些可能永远都不会访问到的索引,这样会导致空间消耗和索引更新带来的消耗;
以上,如有错谬,请不吝指正。
MSSQL订阅库索引对齐的更多相关文章
- 使用SQLServer同义词和SQL邮件,解决发布订阅中订阅库丢失数据的问题
最近给客户做了基于SQLServer的发布订阅的“读写分离”功能,但是某些表数据很大,经常发生某几条数据丢失的问题,导致订阅无法继续进行.但是每次发现问题重新做一次发布订阅又非常消耗时间,所以还得根据 ...
- MSSQL Rebuild(重建)索引
MSSQL Rebuild(重建)索引 前的项目是做数据库的归档,在每次archive后都需要对原数据库的索引进行rebuild,以减少索引碎片,于是乎就自己写了一段sql: DECLARE @tab ...
- sql server重建全库索引和更新全库统计信息通用脚本
重建全库索引: exec sp_msforeachtable 'DBCC DBREINDEX(''?'')' 更新全库统计信息: --更新全部统计信息 exec sp_updatestats 实例反馈 ...
- SQL Server 解读【已分区索引的特殊指导原则】(1)- 索引对齐
一.前言 在MSDN上看到一篇关于SQL Server 表分区的文档:已分区索引的特殊指导原则,如果你对表分区没有实战经验的话是比较难理解文档里面描述的意思.这里我就里面的一些概念进行讲解,方便大家的 ...
- mySql---数据库索引原理及优化
一.写在前面 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型 ...
- MSSQL站库分离情况的渗透思路
本文转自:http://bbs.blackbap.org/thread-6203-1-2.html 1. 服务器属内网环境,站库分离,通过web.config找到数据库服务库SA帐号密码,成功添加用户 ...
- Python-数据库索引浅谈
检索原理 检索初识 索引在MySQL中是一种"键",是存储引擎用于快速找到记录的一种数据结构.索引对于良好的检索性能,非常关键,尤其是当表中的数据量越大,索引对于性能的提升越显 ...
- OpenCV 3.0函数库索引
================================== 前言:值的个数: cvCrossProduct:计算两个三维向量的向量积(叉积): cvCvtColor:将数组的通道从一个颜色空 ...
- MSSQL优化之索引优化
一.认识索引 (一)深入浅出理解索引结构 实际上,您可以把索引理解为一种特殊的目录.微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引.簇集索引)和非聚集 ...
随机推荐
- NULL指针、零指针、野指针
1.1.空指针 如果 p 是一个指针变量,则 p = 0; p = 0L; p = '\0'; p = 3 - 3; p = 0 * 17;p=(void*)0; 中的任何一种赋值操作之后, p 都成 ...
- spring mvc中使用freemark的一点心得
参考文档: FreeMarker标签与使用 连接http://blog.csdn.net/nengyu/article/details/6829244 freemarker学习笔记--指令参考: ht ...
- myeclipse构建webservice项目
新建server端 1 创建Web Service Project项目 2.项目名称:HelloWorldServer 3.创建接口类 4.发布 选择项目名称,选择从Java类中构建web servi ...
- MySQL使用说明
一.概述 什么是数据库 ? 答:数据的仓库,如:在ATM的示例中我们创建了一个 db 目录,称其为数据库 什么是 MySQL.Oracle.SQLite.Access.MS SQL Server等 ? ...
- Ubuntu setup Static IP Address
Change Ubuntu Server from DHCP to a Static IP Address If the Ubuntu Server installer has set your se ...
- tokudb引擎磁盘空间不足导致写入失败的调查
故障现象 2016.1.1号早上4点左右,zabbi数据库服务器报警,写入数据失败.登陆机器后检查发现磁盘空间使用95%没有用满,进去zabbix数据库,执行insert命令提示错误“errir 10 ...
- 为linux普通用户添加超级用户权限sudo
问题:假设用户名为:ali如果用户名没有超级用户权限,当输入 sudo + 命令 时, 系统提示: ali is not in the sudoers file. This incident wil ...
- win10 下 gulp-sass 无法使用的解决
参考链接: http://stackoverflow.com/questions/28409100/try-reinstalling-node-sass-on-node-0-12 解决方法: npm ...
- WPF中TreeView的使用
因为项目中需要用到TreeView控件,由于是第一次在WPF中用到,因此事先在网上搜了很多关于数据绑定的方法介绍,个人经过实际应用,觉得WPF中的HierarchicalDataTemplate定义模 ...
- 快速开发一个PHP电影爬虫
今天来做一个PHP电影小爬虫.我们来利用simple_html_dom的采集数据实例,这是一个PHP的库,上手很容易.simple_html_dom 可以很好的帮助我们利用php解析html文档.通过 ...