mongodb基本常用操作和指令

capped collection
capped
collections是性质出色的富有一定大小的会师(定容集合),以LRU(Least
Recently Used最近至少使用)规则和插顺序进行
age-out(老化移出)处理,自动保护集合中目标的插顺序,在创
建时要预先指定大小。如果空间用完,新加上的靶子将会晤代表集合中极度老的对象。
可以插及更新,但创新不克凌驾 collection
的尺寸,否则更新失败。不同意删除,但是可 以调用 drop()
删除集合中之具备执行,但是 drop 后需要显式地重建集合。在 32 位机上,一
只capped collection的太可怜价值大约为482.5M,64 位上只受系统文件大小的限。

MySQL的优点

  • 下简单

  • 开源免费

  • 扩展性“好”,在自然阶段扩展性好

  • 社区活跃

  • 性好满足互联网存储和性能需求,离不开硬件支持

上面立几乎独要素呢是绝大多数庄选择考虑MySQL的原由。不过MySQL本身存在的题材跟限也坏多,有些题目点为时常于外数据库吐槽要轻

目前正在实施的讲话
db.currentOp().inprog
kill某操作
db.killOp(<operation id>)

字段规范

  • 富有字段均定义为NOT NULL ,除非你真想存Null

  • 字段类型在满足要求原则下更是聊更是好,使用UNSIGNED存储非负整数
    ,实际利用时存储负数场景不多

  • 采用TIMESTAMP存储时

  • 动用varchar存储变长字符串
    ,当然如果专注varchar(M)里的M指的是字符数不是配节数;使用UNSIGNED
    INT存储IPv4 地点而未是CHAR(15) ,这种方式只能存储IPv4,存储不了IPv6

  • 动DECIMAL存储精确浮点数,用float有的时候会来题目

  • 少用blob text

至于为何定义不采用Null的原因

* 1.浪费储存空间,因为InnoDB需要发出额外一个字节存储

* 2.表内默认值Null过多会潜移默化优化器选择执行计划

至于使用datatime和timestamp,现在在5.6.4以后又起矣变,使用二者存储在仓储空间及颇差异更是小
,并且我datatime存储范围就比timestamp大丛,timestamp只能存储到2038年

图片 1

mongodb停止
> use admin;
switched to db admin
> db.shutdownServer()
server should be down…

转自http://www.php1.cn/Content/DanBiao\_60\_YiJiLuDengDaShuJuChangJingDe\_MySQL\_YouHuaHeYunWeiZhiDao\_%7C\_GaoKeYongJiaGou.html,
更多详细资料请参见原文

mongodb 指定安排文件
mongod –config /etc/mongo.conf
典型配置(单机)
[root@dev logs]# cat /etc/mongo.conf
port = 27017
dbpath = /usr/local/mongodb-linux-x86_64-rhel70-3.4.3/db
logpath = /usr/local/mongodb-linux-x86_64-rhel70-3.4.3/logs/mongo.log
smallfiles = true
directoryperdb = true # 初始化后不可知改改
storageEngine = wiredTiger # 3.0后增加,默认为mmap
fork = true
logappend = true
journal = true

属性优化

导入csv数据
mongoimport –type csv -d test -c postalCodes –headerline –drop
pincodes.csv
类select分页查询
use spider;
db.stat.find({state:’Gujarat’}/*条件*/,{_id:0, city:1,
state:1,pincode:1}/*查询字段*/).sort({city:1}).skip(10).limit(10)
利用ttl索引是的文档expire
mongod –shutdown

数据库运维规范

对此新型版本比如3.4,windows
7下或者报api-ms-win-crt-runtimel1-1-0.dll。

数据恢复方案

脚下底MySQL数据恢复方案主要还是因备份来平复,可见备份的基本点。比如我今天下午15碰去了线及同摆设表,该如何回复也?首先肯定删除语句,然后用备份扩容实例启动,假设备份时间点是黎明3触及,就还得将昕3碰至今天有关这发明的binlog导出来,然后使及新扩容的实例上,确认好恢复的时间点,然后将删除表的数据导出来下及丝及。

性能工具
mongotop
mongostat

目录规范

  • 单个索引字段往往不越5,单表索引数量不超5,索引设计本B+
    Tree索引最荒唐前缀匹配原则

  • 择区分度高的列作为索引

  • 成立之目能掩盖80%首要的查询,不求全,解决问题之主要矛盾

  • DML和order by和group by字段要建适当的目

  • 免索引的隐式转换

  • 避免冗余索引

关于索引规范,一定要切记索引这个事物是一模一样管双刃剑,在加紧读之又也引入了过多附加的写入和沿,降低写副能力,这也是为什么要控制索引数原因。之前看了无数口深受表里每个字段都修了目录,其实针对查询可能由无交啊作用。

冗余索引例子

  • idx_abc(a,b,c)**

  • idx_a(a) 冗余

  • **idx_ab(a,b) 冗余

隐式转换例子

字段:remarkvarchar(50) NOT Null

MySQL>SELECTid,gift_codeFROM gift WHEREdeal_id= 640 AND
remark=115127; 1 row in set (0.14 sec)

MySQL>SELECTid,gift_codeFROM pool_gift WHEREdeal_id= 640 AND
remark=‘115127’; 1 row in set (0.005 sec)

字段定义为varchar,但传播的价值是只int,就见面招全表扫描,要求程序端要盘活项目检查

后台模式启动
mongod –fork
点名日志文件
mongod –logpath /logs/mongo.log
每个db一个目
mongod –logpath

复制优化

MySQL复制:

  • 是MySQL应用得最好普遍的采取技术,扩展成本低

  • 逻辑复制

  • 单线程问题,从库延时问题

  • 可以举行备份或读复制

题目重重,但是能缓解主干问题

图片 2

落得图是MySQL复制原理图,红框内便是MySQL一直让人指责的单线程问题

单线程问题吗是MySQL主从延时之一个重大原由,单线程解决方案:

  • 官5.6+多线程方案

  • Tungsten为代表的老三着并行复制工具

  • sharding

图片 3

及图是MySQL5.6
目前落实的并行复制原理图,是冲库级别之复制,所以若你唯有发生一个仓库,使用这义不很

本MySQL也认及5.6这种相互的瓶颈所在,所以于5.7引入了另外一种并行复制方式,基于logical
timestamp的并行复制,并行复制不再受限于库底个数,效率会大大提升

图片 4

高达图是5.7底logical timestamp的复制原理图

方自哉涉及MySQL原来就支持异步复制,这种多少安全性是非常不同之,所以后来引入了大体上伙复制,从5.5发端支持

图片 5

落得图是原生异步复制与一半齐复制的区别。可以看看半共通过从库返回ACK这种方式确认由仓库收到数量,数据安全性格大大提高

于5.7之后,半齐声啊可以配备你指定多个从库参与半同步复制,之前版本都是默认一个从库

于半联手复制效率问题时有发生一个粗之优化,就是使5.6+的mysqlbinlog以daemon方式作为从库,同步效率会吓过多

关于更安全的复制,MySQL
5.7为是生方案的,方案名叫Group replication
官方多主方案,基于Corosync实现

图片 6

https://www.mongodb.com/download-center?jmp=nav下载对应OS的版本,tar
-xzvf解压

sharding拆分问题

  • Sharding is very complex, so itʼs best not to shard until itʼs
    obvious that you will actually need to!

  • sharding是以一定规则数据更分布之计

  • 重要解决单机写副压力过大和容量问题

  • 首要有垂直拆分和品位拆分点儿栽方式

  • 拆分要适当,切勿过度拆分

  • 起中档层控制拆分逻辑最好,否则拆分了密切管理基金会大高

早就管理之单表最深60亿+,单表数据文件大小1TB+,人发生早晚就要懒一些

图片 7

达成图是水平拆分和直拆分的示意图

集合重命名
db.log1.renameCollection(‘log’)
翻集合的统计信息
db.log.stats()
翻开db的统计信息
db.stats()

骨干延时问题

由来:一般都见面召开读写分离,其实自从仓库压力反而比主库大/从库读写压力很非常容易导致延时。

解决方案:

  • 首先定位延时瓶颈

  • 只要是IO压力,可以透过提升硬件解决,比如替换SSD等

  • 假若IO和CPU都非是瓶颈,非常有或是SQL单线程问题,解决方案可以考虑刚才提到的并行复制方案

  • 假设还有题目,可以考虑sharding拆分方案

涉嫌延时只能提到大坑人之Seconds behind master,使用了MySQL的应该充分熟悉

是价的源码里算法

long time_diff= ((long)(time(0) – mi->rli.last_master_timestamp) –
mi->clock_diff_with_master);

Secondsbehindmaster来判断延时不可靠,在网络抖动或者部分异样参数配置情况下,会促成这个价是0但其实延时很要命了。通过heartbeat表插入时穿这种机制判断延时是再度依靠谱的

复制注意点:

  • Binlog格式,建议都应用row格式,数据一致性更好

  • Replication filter应用

核心数据一致性问题:

  • row格式下之数据恢复问题

MySQL存在的题目

  • 优化器对复杂SQL支持不好

  • 针对SQL标准支持不好

  • 大规模集群方案不熟,主要因中间件

  • ID生成器,全局自增ID

  • 异步逻辑复制,数据安全性问题

  • Online DDL

  • HA方案免周到

  • 备份和死灰复燃方案要比较复杂,需要依赖外部组件

  • 呈现给用户信息过少,排查问题困难

  • 有的是分,让人口为难取舍

见到了方称的MySQL的优势和劣势,可以看到MySQL面临的题材还是巨大于她的优势的,很多题目为是咱们实际上得以运维中优化解决的,这吗是MySQL
DBA的一方面价值所在。并且MySQL的持续向上吧去不起社区支持,比如Google最早交付的一半联袂patch,后来为统一到法定主线。Facebook
Twitter等啊都开源了中用MySQL分支版本,包含了她们内部以的patch和特征。

SQL类规范

  • 尽量不采取存储过程、触发器、函数等

  • 避采用大表的JOIN,MySQL优化器对join优化策略过于简单

  • 避免在数据库着开展数学运算和另外大量计任务

  • SQL合并,主要是恃的DML时候基本上单value合并,减少和数据库交互

  • 客观之分页,尤其好分页

  • UPDATE、DELETE语句不下LIMIT ,容易招主从不一致

正式是意义

  • 保证线上数据库schema规范

  • 缩减出问题概率

  • 利自动化管理

  • 专业需要长期坚持不懈,对出以及DBA是一个双双胜利的工作

思想没有开规范,有的开写有各种全表扫描的SQL语句或者各种奇葩SQL语句,我们前面就扣留了支付写的SQL
可以打印出一些页纸。这种造成工作自不平静,也会叫DBA天天忙于各种救火。

单表60亿笔录等死数据场景的MySQL优化以及运维的志 | 高可用架构

前言

MySQL数据库世家应还死熟悉,而且就前几年之阿里的失去IOE,MySQL逐渐引起更多口之青睐。

数据库备份

第一要包的,最中心之是数据库数据安全性。数据安全还保持不了的场面下道其他的指标(如性能等),其实意义就是未死了。

备份的意义是什么吗?

  • 数据恢复!

  • 数据恢复!

  • 数据恢复!

当前备份方式的几乎独纬度:

  • 全量备份 VS 增量备份

  • 热备 VS 冷备

  • 物理备份 VS 逻辑备份

  • 延时备份

  • 全量binlog备份

提议措施:

  • 热备+物理备份

  • 主干工作:延时备份+逻辑备份

  • 全量binlog备份

借一下有大型互联网商家开的备份系统数据:一年7000+不良扩容,一年12+次数据恢复,日志量每天3TB,数据总量2PB,每天备份数据量百TB级,全年备份36万不善,备份成功了99.9%。

重中之重做的几接触:

  • 备份策略集中式调度管理

  • xtrabackup热备

  • 备份结果统计分析

  • 备份数据一致性校验

  • 使用分布式文件系统存储备份

备份系统应用分布式文件系统原因:

  • 解决存储分配的问题

  • 釜底抽薪存储NFS备份效率低下问题

  • 储存集中式管理

  • 数量可靠性还好

行使分布式文件系统优化点:

* Pbzip压缩,降低多称本存储带来的贮存成本,降低网络带来富消耗

* 元数据节点HA,提高备份集群的可用性

* erasure code方案调研

杨尚刚,美图公司数据库高级DBA,负责美图后端数据存储平台建设同架构设计。前新浪高级数据库工程师,负责新浪微博核心数据库搭改造优化,以及数据库连带的服务器存储选型设计。

数据库开规范

数据库支付规范定义:开发规范是对准中支出的一致多级建议要规则,
由DBA制定(如果发DBA的口舌)。

开规范自身也暗含几有的:基本命名和封锁规范,字段设计规范,索引规范,使用正式。

基本命名和约束规范

  • 申字符集选择UTF8 ,如果急需存储emoj表情,需要采取UTF8mb4(MySQL
    5.5.3后头支持)

  • 积存引擎使用InnoDB

  • 转换长字符串尽量用varchar varbinary

  • 不在数据库蒙存储图片、文件等

  • 单表数据量控制以1亿之下

  • 库名、表名、字段名非使用保留字

  • 库名、表名、字段名、索引名使用小写字母,以下划线分割 ,需要见名知意

  • 库表名不要设计过长,尽可能用最为少之字符表达出表的用处

运维规范重大内容

  • SQL审核,DDL审核及操作时,尤其是OnlineDDL

  • 危险操作检查,Drop前做好数据备份

  • 权限决定及审计

  • 日记分析,主要是因的MySQL慢日志与左日志

  • 高可用方案

  • 数据备份方案

MySQL优化相关的case

Query
cache,MySQL内置的查询加速缓存,理念是好之,但计划不够合理,有点out。

絮之粒度非常大MySQL 5.6默认已经倒闭

When the query cache helps, it can help a lot. When it hurts, it can
hurt a lot.明显前半词都远非太大用处,在高并发下非常容易遇到瓶颈。

关于业务隔离级别
,InnoDB默认隔离级别是不过另行读级别,当然InnoDB虽然是安装的可重复读,但是也是釜底抽薪了幻读的,建议改成为读就交给级别,可以满足大多数场面需求,有利于重胜似的出现,修改transaction-isolation。

图片 8

 

图片 9

高达图是一个较经典的死锁case,有趣味可以测试下

关于SSD

有关SSD,还是提一下吧。某资深大V说罢“最近10年针对数据库性影响最老的凡闪存”,稳定性和性能可靠性已经获周边验证,多块SATA
SSD做Raid5,推荐用。采用PCIe SSD,主流云平台都提供SSD云硬盘支持。

 

末尾说一下豪门关注之单表60亿笔录问题,表里数据也是线及较基本之。

优先说生这景象,表结构比较简单,都是bigint这种整型,索引比较多,应该产生2-3个,单表行数60亿+,单表容量1.2TB左右,当然内部肯定是发生碎片的。

形成由:历史遗留问题,按照我们前说的开支规范,这个理应早拆分了,当然不拆有几乎独由:

  1. 性不碰到瓶颈 ,主要原因

  2. DBA比较“懒“

  3. 怀念看InnoDB的极限,挑战一下。不过风险也是杀挺的,想想如果以一个1.2TB表上加个字段加个索引,那感觉绝对酸爽。还有即使是单表恢复的问题,恢复日未可控。

我们继续做的优化
,采用了方提到的TokuDB,单表容量在InnoDB下1TB+,使用Tokudb的lzma压缩至80GB,压缩效果挺好。这样吗解决了单表过好复日问题,也支撑online
DDL,基本达到我们预料。

今天谈话的最主要对MySQL本身优化以及业内性质的事物,还有部分比好的运维经验,希望大家能享有得。今天这些内容是啊延续数据库做平台化的基本功。我今天享受就顶此,谢谢大家。

可用性

关于可用性,我们今天分享同种无缝切主库方案,可以用于日常切换,使用思路为比较简单

在正常尺度下什么样无缝去做主库切换,核心思路是为新主库和从库停于同位置,主要依赖slave
start until 语句,结合双主结构,考虑自增问题。

图片 10

MySQL集群方案:

  • 集群方案要是何等组织MySQL实例的方案

  • 主流方案基本还是采用的凡MySQL原生的复制方案

  • 原生主从同步肯定存在着性及安全性问题

MySQL半并复制:

今日为产生一对反驳及可用性更强之别方案

  • Percona XtraDB Cluster(没有足够的把控力度,不建议及)

  • MySQL Cluster(有官方支持,不过事实上用的非多)

图片 11

开门红框内是眼前大家用比较多的配备组织以及方案。当然十分层面的HA也发生那么些叔在工具支持,比如MHA、MMM等,推荐以MHA

InnoDB优化

成熟开源事情存储引擎,支持ACID,支持工作四个隔离级别,更好的数量安全性,高性能大起,MVCC,细粒度锁,支持O_DIRECT。

一言九鼎优化参数:

  • innodbfileper_table =1

  • innodbbufferpool_size,根据数据量和内存合理设置

  • innodbflushlog_attrxcommit= 0 1 2

  • innodblogfile_size,可以装特别片段

  • innodbpagesize

  • Innodbflushmethod = o_direct

  • innodbundodirectory 放到高速设备(5.6+)

  • innodbbufferpool_dump

  • atshutdown ,bufferpool dump (5.6+)

    图片 12

 

直达图是5.5 4G底redo log和5.6 设置过4G redo
log文件性能比,可以看到泰更好了。innodblogfile_size设置还是很有意义的

InnoDB比较好之特性:

  • Bufferpool预热和动态调整大小,动态调整大小要5.7支撑

  • Page size自定义调整,适应当下硬件

  • InnoDB压缩,大大降低数据容量,一般可减去50%,节省存储空间以及IO,用CPU换空间

  • Transportable tablespaces,迁移ibd文件,用于快速单表恢复

  • Memcached API,full text,GIS等

InnoDB在SSD上的优化:

  • 在5.5以上,提高innodbwriteiothreads和innodbreadiothreads

  • innodbiocapacity需要调大

  • 日志文件和redo放到机械硬盘,undo放到SSD,建议如此,但必要性不甚

  • atomic write,不需要Double Write Buffer

  • InnoDB压缩

  • 单机多实例

为使打清楚InnoDB哪些文件是逐一读写,哪些是自由读写

擅自读写:

  • datadir

  • innodbdata file_path

  • innodbundo directory

逐条读写:

  • innodbloggrouphomedir

  • log-bin

InnoDB VS MyISAM:

  • 数据安全性格要,InnoDB完胜,曾经碰到了同样不良90G的MyISAM表repair,花了点儿龙时间,如果以线及几不可忍受

  • 连发度高

  • MySQL 5.5默认引擎改吧InnoDB,标志在MyISAM时代的散

TokuDB:

  • 支撑工作 ACID 特性,支持多版本控制(MVCC)

  • 冲Fractal Tree Index,非常适合写副密集场景

  • 高压缩比,原生支持Online DDL

  • 主流分支都支持,收费转开源 。目前得和InnoDB媲美的仓储引擎

现阶段主流应用TokuDB主要是满意了它的高压缩比,Tokudb有三种压缩方式:quicklz、zlib、lzma,压缩比依次更强。现在成千上万下zabbix的后端数据表都采用的TokuDB,写副性能好,压缩比大。

下图是自己事先举行的测试对照与InnoDB

图片 13

 

图片 14

达图是sysbench测试的跟InnoDB性能对比图,可以见到TokuDB在测试过程中形容副平稳是充分好之。

tokudb存在的题材:

  • 法定分支还并未大好的支持

  • 热备方案问题,目前只有企业版才产生

  • 要有bug的,版本更新比较快,不建议在核心工作上之所以

遵我们之前遇到过一个题目:TokuDB的里状态显示上亦然不行成功的checkpoint时间是“Jul
17 12:04:11 2014”,距离这发觉本犹赶紧5独月了,结果堆积了大量redo
log不能够去除,后来只得再开实例,结果再行开还花了七八只小时

Online DDL问题

原生MySQL执行DDL时需要锁表,且锁表期间作业是心有余而力不足形容副数据的,对劳务影响大死,MySQL对立即方面的支持是比差之。大表做DDL对DBA来说是老大惨痛的,相信广大口涉了。如何好Online
DDL呢,是不是不怕无解了吗?当然不是!

图片 15

地方表格里关系的 Facebook OSC和5.6 OSC也是眼下个别栽比较靠谱的方案

MySQL
5.6之OSC方案还是解决不了DDL的时节到于库延时之问题,所以现在建议利用Facebook
OSC这种思路更优雅

下图是Facebook OSC的思路

图片 16

后来Percona公司因Facebook
OSC思路,用perl重写了一样版本,就是咱现在为此得好些底pt-online-schema-change,软件本身非常成熟,支持即主流版本。

应用pt-online-schema-change的长处有:

  • 1.无阻塞写副

  • 2.完美之尺度检测和延时负荷策略控制

值得一提的凡,腾讯互娱的DBA在其中分支上呢兑现了Online
DDL,之前测试了真正是,速度快,原理是经修改InnoDB存储格式来落实。

使pt-online-schema-change的限有:

  • 改表时间会见较丰富(相比直接alter table改表)

  • 改的表需要出唯一键或主键

  • 当同等端口及之起修改不能够最好多

MySQL历史

  • 1979年,Monty Widenius写了初的版,96年公布1.0

  • 1995-2000年,MySQL AB成立,引入BDB

  • 2000年4月,集成MyISAM和replication

  • 2001年,Heikki Tuuri向MySQL建议集成InnoDB

  • 2003发表5.0,提供了视图、存储过程相当效果

  • 2008年,MySQL AB被Sun收购,09年推出5.1

  • 2009年4月,Oracle收购Sun,2010年12月推出5.5

  • 2013年2月推出5.6 GA,5.7开发中

此文是根据杨尚刚以【QCON高可用架构群】中,针对MySQL在单表海量记录等景象下,业界普遍关注之MySQL问题之更分享整理而成为,转发呼吁注明出处。

本选择

  • MySQL社区本,用户群体最充分

  • MySQL企业版,收费

  • Percona Server版,新特色多

  • MariaDB版,国内用户不多

建议选择先级也:MySQL社区版 > Percona Server > MariaDB >
MySQL 企业版

但本如大家利用RDS服务,基本还盖社区本为主

发表评论

电子邮件地址不会被公开。 必填项已用*标注