Linux数据库管理——day10——分库分表、数据库硬件优化
分库分表
分库分表也称作分片技术,主要作用是将存放在一个数据库中的数据按照特定的方法进行拆分,分散存放在多个数据库中,以达到分散多台设备实现负载均衡
垂直分割
纵向切分,把一个表的表结构拆分开来,形成多个表
实质上就是把一个表的表结构中的多个字段拆成多个组合,每个组合都自成一个表
水平分割
横向切分,把一个表的表记录切分成多个表
实质上吧一个表中的数据拆成多个模块,而表结构没有变化。
Mycat
mycat是基于java的分布式数据库系统,为高并发环境的分布式访问提供解决方案
工作流程
Mycat有很多算法,每个算法都有专属的标识字段,根据这些字段,mycat可以找到数据具体存储的位置。
搭建mycat服务器
1. 装包
1.1 安装jdk,也就是java相关的软件包
1.2 安装 mycat-server 服务软件包
2. 配置
修改配置文件server.xml
<user name="用户名"><property name="password">密码</property><property name="schemas">逻辑库名(用户看到的库名)</property><property name="readOnly">true(只读权限设定,不写这一行默认为读写权限)</property></user>
配置文件schema.xml
<table name="travelrecord" dataNode="dn1,dn2(结点名,根据自己的数据库个数决定)" rule="auto-sharding-long" /><!-- global table is auto cloned to all defined data nodes ,so can join with any table whose sharding node is in the same data node --><table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2(这两行也是根据数据库个数决定)" /><table name="goods" primaryKey="ID" type="global" dataNode="dn1,dn2" /><!-- 指定数据存储节点的数据库名,以及这个数据库中存储数据的库名 --><dataNode name="dn1(结点名)" dataHost="localhost1(数据库名)" database="db1" /><!-- 给每个数据库指定相应的信息 --><dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"><heartbeat>select user()</heartbeat><!-- can have multi write hosts --><writeHost host="hostM1" url="数据库服务器IP:端口号(3306)" user="连接使用的用户名"password="密码"><!-- can have multi read hosts --></writeHost></dataHost>
3. 对数据库服务器进行相关操作
sed -i '/lower_case_table_names/d' /etc/my.cnf
sed -i '/\[mysqld\]/alower_case_table_names = 1' /etc/my.cnf
systemctl restart mysqld
4. 启动服务
mycat start
netstat -ntlup | grep :8066
注意:
1. 客户端连接的时候,发现有很多空表,这些都是要自己修改创建的
2. 不过创建的时候,需要根据数据库的具体算法进行,创建算法要求的字段(列)
系统优化
设置最大并发数
# 查看设定的最大并发数:
show variables like 'max_connections';
# 修改最大并发数
set max_connections=值;
# 查看历史访问最大并发数:
show global status like 'max_used_connections';
设置的最优值:
max_connections = max_used_connections / 0.85
设定的最大并发值 = 历史最大并发数 / 0.85
查看连接的详细信息:
show processlist;
连接超时(单位秒) | |
connect_timeout | 等待连接超时,当用户在TCP三次握手连接的时候相应时间太久就会自动登出,一般时间不宜太高,默认10s |
wait_timeout | 等待关闭连接不活动超时,当从最后一次SQL语句操作开始计时,到下一个SQL语句间隔时间,过长久断开,不过为了让SQL语句能完整的执行完,不宜太短,默认8小时 |
缓存控制(单位字节) | |
key_buffer_size | 用于MyISAM引擎的关键索引缓存大小 |
show global status like 'key_read%'; 如果查出来的值较低的时候提高这个缓存值 | |
sort_buffer_size | 为每个排序的线程分配此大小的缓存空间 |
提高此值可以提高order的group的执行速度 | |
read_buffer_size | 为排序读取表记录保留的缓存大小 |
影响SQL查询的相应速度,此值越大查询越快 | |
tread_buffer_size | 允许保存在缓存中的被重用的线程数量 |
show gloabal status like 'threads_%'; 查看线程状态,以这个值的常值为线程数最优 | |
table_open_cache | 为所有线程缓存的打开的表的数量 |
show global status like 'open%tables'; 查看已经打开的表,是理想比例<=95% |
优化查询缓存设置 | |
show variables like 'query_cache%'; | |
query_cache_limit | 缓存最大存储限制 |
query_cache_min_res_unit | 缓存最小存储单元 |
query_cache_wlock_invalidate | 是否开启写锁,如果开启,当数据修改,就会自动把缓存中的数据删除,下次用户查看的时候就是到磁盘中找 |
优化后作用表现(命中情况越高说明优化的越好) | |
show global status like 'qcache%'; | |
Qcache_hits | 查询缓存中的命中情况 |
Qcache_inserts | 查询请求总数 |
优化思路
1. 查看硬件使用情况(cpu 内存 存储空间)
2. 查看网络接口流量
3. 查看数据库服务运行时,参数配置
show variables;show global status;
并发连接数量 超时时间 重复使用的线程数量
多个线程同时打开表的数量
查询缓存配置 索引缓存
处理不同查询方式mysql存储使用缓存设置
错误日志
默认已经开启,记录数据库所有错误信息
查询日志
记录mysql数据库中所有执行的命令
启动查询日志,修改配置文件/etc/my.cnf
sed -i '/\[mysqld\]/ageneral_log' /etc/my.cnf
不修改存储位置,默认存在 /var/lib/myql/主机名.log 文件内
如果需要修改查询日志的位置
sed -i '/\[mysqld\]/ageneral_log_file=存储位置' /etc/my.cnf
慢查询日志
记录耗时较长或不使用索引的查询操作
启动慢查询日志,修改配置文件/etc/my.cnf
sed -i '/\[mysqld\]/alog-queries-not-using-indexes' /etc/my.cnf
sed -i '/\[mysqld\]/aslow-query-log' /etc/my.cnf
默认存储在 /var/lib/myql/主机名-slow.log
如果想修改存储位置
sed -i '/\[mysqld\]/aslow-query-log-file=存储位置' /etc/my.cnf
默认统计的是查询时间超过 10s的查询记录,如果想修改,命令如下
sed -i '/\[mysqld\]/along-query-time=数字' /etc/my.cnf
统计查看慢查询日志记录的sql命令
mysqldumpslow /var/lib/mysql/mysql51-slow.log
Linux数据库管理——day10——分库分表、数据库硬件优化相关推荐
- 网易分库分表数据库DDB
作者:马进,DDB项目负责人,2013年加入网易,热衷于分布式中间件相关方面工作,从事过分库分表数据库DDB.缓存NKV.分布式事务中间件TCC.分布式视频处理系统NTS等项目. 本文为<程序员 ...
- 分库分表数据库中间件对比
http://www.cnblogs.com/taoxinrui/p/6782791.html http://www.tuicool.com/articles/A77R3m http://blog.c ...
- 分布式专题-数据库分库分表之Mycat01-数据库性能优化方案
目录导航 前言 为什么要分库分表 数据库性能瓶颈主要原因 数据性能优化方案 SQL 与索引 表与存储引擎 架构 配置 操作系统与硬件 架构演进与分库分表 单应用单数据库 多应用单数据库 多应用独立数据 ...
- 并发编程-26 高并发处理手段之服务降级与服务熔断 + 数据库切库分库分表
文章目录 服务降级与服务熔断概述 服务降级举例 服务熔断 VS 服务降级 服务降级要考虑的问题 Hystrix 数据库切库分库分表 高可用的一些手段 服务降级与服务熔断概述 服务熔断: 一般是指软件系 ...
- 【预告】千亿数据的潘多拉魔盒:从分库分表到分布式数据库
近年来,随着国内互联网行业的加速发展,以及摩尔定律的实效,千亿数据的潘多拉魔盒早已打开,传统的开源/商业关系数据库早已遇到了容量的瓶颈.而容量告警则不仅意味着业务发展收到影响,同时对现有系统的稳定性和 ...
- 【数据库】分库分表分区
目录 通用的概念 拆分方式 水平拆分(Sharding) 垂直拆分 一.分区 1. 分区的特点 2. 分区路由规则 3. 分区优/缺点 参考 二.分库分表 为什么分库分表 1. 分库 2. 分表 3. ...
- 阿里巴巴中台战略--数据库分库分表之异构索引表
阿里巴巴中台战略 阿里共享事业部的产生.演变和发展 企业信息中心发展的症结 共享服务体系 分布式服务框架的选择 共享服务中心建设原则 数据库瓶颈阻碍业务的持续发展 数据库分库分表 数据库分库分表之异构 ...
- MySQL 分库分表实践
文章目录 一.为什么要分库分表 二.库表太大产生的问题 三.垂直拆分 1. 垂直分库 2. 垂直分表 四.水平分表 1. 配置水平分表 2. 测试水平分表 一.为什么要分库分表 数据库架构演变 刚开始 ...
- 分库分表——基本概念以及shardingJdbc和Mycat对比
1.什么是分库分表 就是把原本存储于一个库的数据分块存储到多个库上,把原本存储于一个表的数据分块存储到多个表上. 2.为什么分库分表 数据库中的数据量不一定是可控的,在未进行分库分表的情况下,随着时间 ...
最新文章
- 百度地图 ip查询 service
- 行人重识别技术不断突破 安防企业力拔头筹
- 揭秘天猫双十一背后的那位贤内助
- ipad如何连接电脑_指纹打卡机如何连接电脑?怎么导出原始考勤数据记录?
- Dell服务器相关操作
- python创建excel图表_Python:使用图表创建Excel工作表
- 经典面试题 之 子数组之和最大值
- GitHub的基础使用入门
- .net面试题(会持续更新)
- ES6系列:什么是ES6? 新手应该怎么理解
- pycharm怎么做html网页_html下拉菜单怎么做
- C语言底层原理(一):预处理、编译、汇编、链接
- 读《深入浅出统计学》
- html弹窗无限循环,html恶搞之无限弹窗
- windows——运行命令大全(让你的电脑掌控在自己手中)
- 左程云基础班——排序算法
- AAM Alignment最后一篇:Robust AAM Alignment with Occlusion
- Alpha阶段敏捷冲刺③
- 黑马程序员_Java_反射
- Symantec Backup Exec备份作业服务器盘符变更