03.SQLServer性能优化的—存储优化系列

汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql

概  述:http://www.cnblogs.com/dunitian/p/6041323.html#com

以下内容皆为私家摸索,没有丁特意指导(公司无给力啊!DBA和大牛都麻有。。。),所以难免出错,如发错欢迎指正,小子勇于接受批评~(*^__^*)
~

style=”line-height: 1.5;”>水平分库分表和直分库分表,大家都隔三差五讲,我说生自己的亮,看图:

图片 1

笔直分表就甭说了,基本上会SQLServer的且见面。

 

垂直分库就是冲业务要求来分库,比如教育多重之,可以分为资讯,课程,用户(学生,学校)三单数据库。比如电商的可分为订单,商品,用户(商家,消费者)三独数据库。就边仅是选个例子,具体的公得根据你们自己工作的实际上情况来分,不是分的越多越好,最好是赶上瓶颈了再也失做这些工作(这个过程才能够模拟到无数物)

水平分表主要就是有数栽办法,Hash取余法和时间路由法。我重点说生时路由的办法,这种方案后期扩容和历史数据抽离【整合列索引更劲爆哦~】比较便利。

style=”color: #ff6600;”>举个简单的路由表:(时间你得用传统的格式,我当下边用的凡岁月轴)

以此是文章表的日路由表,每次查询文章的时因查询的时探访

图片 2

按照我今天备选写副数据,当前时间 2016/11/18 16:37:29 ==》1479458249

select RTableName from
Route_Article where where
1479458249 between RCreateTime andREndTime**

就是得掌握我该为哪个表里面写多少:==》Article2

同理,想查询有时间之数也是可以通过路由表知道该为哪个表里面查询

图片 3

 

水平分库之前提了瞬间文件组(http://www.cnblogs.com/dunitian/p/5276431.html)后面还见面起同样篇稿子进行扩展说明(http://www.cnblogs.com/dunitian/p/6078512.html),这边就不说了

其实企业里所以之顶多之是复合型的,比如:水平分库分表 ,水平分库+垂直分库+分表

确发生了及时方面的瓶颈的口舌水平分表一般只能解决,并无可知确实解决,毕竟还是于同令服务器上。单表的数据量是削减了,但是IO,连接数,带富之类的瓶颈并无能够出多异常之改善。

水平分库分表可以管IO瓶颈解决一些,优化作用还是大显著的:

图片 4

 

 

水平分库+垂直分库+分表,这个方案得以用链接服务器,这样路由于表就无须转了,把路由表的表名改化完全的名称( style=”color: #ff6600;”>后面会说再度好之法门)

扣押直观图: style=”color: #ff6600;”>[192.168.1.250].[BigValues].[dbo].[Article]

图片 5

自家概括模拟一下:我PC的IP是:192.168.1.9

先期在长距离数据库稍微插点数量:2013-1-1 ~
2015-1-1之数额,量可不多,200W左右

图片 6

 没有跨库查询过的同志,可以事先预习一下同义词相关的文化:http://www.cnblogs.com/dunitian/p/6041323.html#tyc

 先设置一下链接服务器。我好摸索的是法恐怕跟网上的不顶相同,不要特别(没办法,我按网上的无成啊+_+)

图片 7

安全性里面安装一下用户称以及密码

图片 8

可以了,看看吧:

图片 9

 先看看效果:

图片 10

斯感觉很好之,一般情形下都是从未问题的,但是遇到数据库名字或表改了就蛋疼了,得改变多少东西??关键是勿极端好,名字那么长。。。===》so,引入了同义词

create synonym Article for
[192.168.1.250].[BigValues].[dbo].[Article]

图片 11

再望效果吧:

图片 12

 

style=”line-height: 1.5; background-color: initial;”>—————————————————————————————————–

style=”line-height: 1.5; background-color: initial;”>是未是感到特略,也想改革起来了?(⊙o⊙)…,其实自己还是建议尽快至瓶颈的下再改,不然你会格外蛋疼的,现在自家就是简单说几独蛋疼的地方~PS:附带我之缓解方案

 

简易说下发生安问题:

 

style=”color: #ff6600;”>1.全局ID的问题,既然分表了,那么首先宗工作就是是把自增长去丢,(eg:表A,ID为44,表B,ID为44,那自己得到44的数目经常,取哪个也?)

相同开始自己是因此GUID的章程,一直觉得此不太好,为甚也,我一般用户ID或者管理人ID会因此GUID,这样Burp的暴力解猜尽管较上门槛了(简单以:http://www.cnblogs.com/dunitian/p/5724872.html)

后来发现,GUID的主键基本上满足需求,但是无序列,而且最好长了,排序什么的且各种不便利,后来就搜其他措施,很多,比如时间轴,后来发现赛并作下还是发双重的(毕竟已经不是单机了)最终利用了 style=”color: #ff0000;”>飞雪算法(https://github.com/twitter/snowflake)

C#本的海外朋友都封装了,大家好去看:https://github.com/ccollie/snowflake-net

style=”color: #888888; text-decoration: line-through;”>强大的网友出来个简化版: style=”color: #888888; text-decoration: line-through;”>http://blog.csdn.net/\*\*\*/article/details/\*\*\*6  style=”color: #888888;”> style=”color: #888888;”>(地址我哪怕无粘了,对长辈要极度起码的敬意)

style=”color: #ff0000;”>同一开始自我因此之是以此本子,后来发现差不多线程的情景下起重新项。。。(demo: style=”color: #ff0000;”>https://github.com/dunitian/TempCode/tree/master/2016-11-16/Twitter\_Snowflake)

图片 13

style=”line-height: 1.5; background-color: initial;”>全局ID的凶猛讨论:https://q.cnblogs.com/q/53552/

切切实实实现:http://www.cnblogs.com/dunitian/p/6130543.html

 

2.跨库Join

MySQL比较蛋疼,MSSQL好像没那么难,我是故链接服务器+同义词的艺术解决的(上面演示的),如果起再次好方案得以提点一下小子^_^

看图:

图片 14

许多时可参照MyCat的一对东西,跨库查询肯定效率没有单机高。有时候会做有甩卖来尽量避免跨库Join

例如表A,表B,表C…常用的全局表我会把他们每个数据库存一整个,这样尽管便宜多了(注意一下多少并啊)

再有即使是冗余一些字段

按部就班:产品表有这些字段:商品展图ID,展图URL,缩略展图URL。按理说这是无成立的,但是未这样干就是得跨库查询了,适当牺牲嘛~

复按照:订单表明内:用户ID,用户称,店铺ID,店铺名,商品缩略展图。这样吧是无客观之,但是。。。商品与订单大家还掌握的,牵扯的表明太多,有点夸大了~

下分库的当儿可以参见MyCat的ER分库 ( style=”color: #ff6600;”>相关联的齐劈叉)

图片 15

图片 16

 

3.过库排序、聚合等

随要求Count,那么每个表都得单独求一下Count,然后汇总Count。这个进程得经过应用程序去好,毕竟可以因路由表来统一集中

排序虽比较蛋疼了,如果是比照时间分表字段)的尚好,因为咱们路由表就是本时间分表的,相对简单。如果依照有字段排序的说话。。。。。(⊙o⊙)…没办法尽管获取每个表里面的多少吧。

许多人数连续疑惑为什么分页越往后面越慢(按时间不畏惧,我们即便是按部就班日分表的,你失去相应时间区里面得到就吓了)

依照按照字段1消除序,每一样页20漫长数据,要求获得第一页的多寡==》

图片 17

获取第五页的数量==》想想看,这么折腾的言辞,怎么不咬?你们有重复好之化解方法好说,小子比较菜O(∩_∩)O

图片 18

 

(⊙o⊙)…,最后说生自家近年当研的化解方案:

分布式数据库访问层: style=”color: #ff6600;”>携程DAL ,支持MySQL,SQLServer。支持Net,Java

Ctrip
DAL支持流行的分库分表操作,支持Java和C#,支持Mysql和MSSqlServer。使用该框架可以以有效地保护公司已起数据库投资之同时,迅速,可靠地为铺面提供数据库访问层的横向扩张能力。

开源地址:https://github.com/ctripcorp/dal

文档系列:https://github.com/ctripcorp/dal/wiki/

图片 19

 图片 20

 

是是后备方案:(下午于情侣去咨询了一部分MyCat的作者,他说MyCat开发之早晚就是从未范围数据库暨支付语言,MySQL,SQLServer都是支持之,换个端口而已,开发语言为没有什么范围,只要您能接二连三MyCat就能用)

数据库中组件:MyCat style=”color: #ff00ff;”>(我还没研究,改天要是足以尽管发篇文章)

官网:http://mycat.io/

文档:https://github.com/MyCATApache/Mycat-doc

开源地址:https://github.com/MyCATApache/Mycat-Server

 

图片 21

 

04.SQLServer性能优化的—读写分离&数据同步 http://www.cnblogs.com/dunitian/p/6041758.html

相关文章