数据库优化前章

 1、硬件层相关优化

  1.1、CPU相关

  在服务器的BIOS设置中,可调整下面的几个配置,目的是发挥CPU最大性能,或者避免经典的NUMA问题:

  1、选择Performance Per Watt Optimized(DAPC)模式,发挥CPU最大性能,跑DB这种通常需要高运算量的服务就不要考虑节电了;

  2、关闭C1E和C States等选项,目的也是为了提升CPU效率;

  3、Memory Frequency(内存频率)选择Maximum Performance(最佳性能);

  4、内存设置菜单中,启用Node Interleaving,避免NUMA问题;

  1.2、磁盘I/O相关

  下面几个是按照IOPS性能提升的幅度排序,对于磁盘I/O可优化的一些措施:

  1、有阵列卡时,设置阵列写策略为WB,甚至FORCE WB(若有双电保护,或对数据安全性要求不是特别高的话),严禁使用WT策略。

  2、尽可能选用RAID-10,而非RAID-5;

  3、使用机械盘的话,尽可能选择高转速的,例如选用15KRPM,而不是7.2KRPM的盘

 2、系统层相关优化

  2.1、文件系统层优化

1、SSD盘的I/O调度为noop

2、磁盘文件需为xfs

3、磁盘挂载参数中增加:noatime, nodiratime, nobarrier几个选项

  2.2、其他内核参数优化

  针对关键内核参数设定合适的值,目的是为了减少swap的倾向,并且让内存和磁盘I/O不会出现大幅波动,导致瞬间波峰负载:

      1、将vm.swappiness设置为5-10左右即可,甚至设置为0(RHEL 7以上则慎重设置为0,除非你允许OOM kill发生),以降低使用SWAP的机会;

      2、将vm.dirty_background_ratio设置为5-10,将vm.dirty_ratio设置为它的两倍左右,以确保能持续将脏数据刷新到磁盘,避免瞬间I/O写,产生严重等待;

      3、将net.ipv4.tcp_tw_recycle、net.ipv4.tcp_tw_reuse都设置为1,减少TIME_WAIT,提高TCP效率;

篇外话

1、让LINUX系统支持xfs文件系统

1、安装xfs支持包

yum -y install xfsprogs kmod-xfs xorg-x11-xfs xfsdump

2、卸载掉原来已挂在的分区,如让sda2变成xfs分区

umount /dev/sda2

3、格式化成xfs格式

mkfs.xfs -f /dev/sda2

4、重新mount

mount -t xfs -o defaults,noatime,nodiratime /dev/sda2 /data

且写入到/etc/fstab文件中后reboot

/dev/sda2             /data                   xfs    defaults,noatime,nodiratime    1 2

2、更改IO调度算法

# echo noop > /sys/block/vda/queue/scheduler

# time dd if=/dev/sda1 of=/dev/null bs=2M

#echo anticipatory > /sys/block/vda/queue/scheduler

time dd if=/dev/sda1 of=/dev/null bs=2M

# echo cfq > /sys/block/sda/queue/scheduler

time dd if=/dev/sda1 of=/dev/null bs=2M

查看

cat cat /sys/block/vda/queue/scheduler ###vda是指你目前的磁盘

修改

echo ‘cfq‘>/sys/block/vda/queue/scheduler

立即生效

3、修改内存调度算法(非统一内存访问NUMA)

查看是否支持:dmesg | grep -i numa

numactl --hardware命令则会返回不同节点的内存总大小,可用大小,以及node distance等信息

  

时间: 2024-10-17 09:18:01

数据库优化前章的相关文章

mysql优化-数据库优化、SQL优化

我有一张表w1000,里面有1000万条数据,这张表结构如下:CREATE TABLE `w1000` ( `id` varchar(36) NOT NULL, `name` varchar(10) DEFAULT NULL, `age` int(3) DEFAULT NULL, `money` double(8,2) DEFAULT NULL, `address` varchar(100) DEFAULT NULL, `create_date` datetime(3) DEFAULT NULL

中国移动MySQL数据库优化最佳实践

原创 2016-08-12 章颖 DBAplus社群 本文根据DBAplus社群第69期线上分享整理而成,文末还有书送哦~ 讲师介绍章颖 数据研发工程师 现任中国移动杭州研发中心数据研发工程师,擅长MySQL故障诊断,性能调优,MySQL高可用技术,曾任中国电信综合平台开发运营中心DBA 开源数据库MySQL比较容易碰到性能瓶颈,为此经常需要对MySQL数据库进行优化,而MySQL数据库优化需要运维DBA与相关开发共同参与,其中MySQL参数及服务器配置优化主要由运维DBA完成,开发则需要从数据

单机数据库优化的一些实践(mysql)

数据库优化有很多可以讲,按照支撑的数据量来分可以分为两个阶段:单机数据库和分库分表,前者一般可以支撑500W或者10G以内的数据,超过这个值则需要考虑分库分表.另外,一般大企业面试往往会从单机数据库问起,一步一步问到分库分表,中间会穿插很多数据库优化的问题.本文试图描述单机数据库优化的一些实践,数据库基于mysql,如有不合理的地方,欢迎指正. 1.表结构优化 在开始做一个应用的时候,数据库的表结构设计往往会影响应用后期的性能,特别是用户量上来了以后的性能.因此,表结构优化是一个很重要的步骤.

MySQL数据库存储引擎与数据库优化

存储引擎 (1)MySQL可以将数据以不同的技术存储在文件(内存)中,这种技术就成为存储引擎. 每种存数引擎使用不同的存储机制.索引技巧.锁定水平,最终提供广泛且不同的功能. (2)使用不同的存储引擎也可以说不同类型的表 (3)MySQL支持的存储引擎 MyISAM InnoDB Memory CSV Archive 查看数据表的创建语句: SHOW CREATE TABLE 表名 相关概念: (1).并发控制:一个人读数据,另外一个人在删除这个数据. 当多个连接对记录进行修改时保证数据的一致性

[转]浅析大数据量高并发的数据库优化

链接:http://www.uml.org.cn/sjjm/201308264.asp 高并发数据库可以同时处理海量信息,应用范围很广.今天我们将讨论的是大数据量高并发的数据库优化,希望对大家有所帮助. 一.数据库结构的设计 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能.所以,在一个系统开始实施之前,完备的数据库模型的设计是必须的. 在一个系统分析.设计阶段,因为数据量较小,负荷较低.我们往往只注意到功能的实现,而很难注意到性

数据库优化方法整理

数据库优化的目标无非是避免磁盘I/O瓶颈.减少CPU利用率和减少资源竞争. 在基于表驱动的信息管理系统(MIS)中,基本表的设计规范是第三范式(3NF). 第三范式的基本特征是非主键属性只依赖于主键属性. 基于第三范式的数据库表设计具有很多优点: 一是消除了冗余数据,节省了磁盘存储空间: 二是有良好的数据完整性限制,即基于主外键的参照完整限制和基于主键的实体完整性限制,这使得数据容易维护, 也容易移植和更新: 三是数据的可逆性好,在做连接(Join)查询或者合并表时不遗漏.也不重复: 四是因消除

数据库优化基础

一.主题 大数据下,如何优化数据库才能使系统的性能有较好的提升. 改善数据库的结构有两种: 一种是采用存储过程代替普通的SQL语句或者优化低效率的SQL语句 另外一种就是使用数据库系统中增强索引和规划分区表进行优化 二.阅读结构 |-数据库优化 |-数据库分库分表 |-垂直切分 |-水平切分 |-数据库分区 |-垂直分区 |-水平分区 |-读写分离 |-主主 |-主从 三.数据库分库分表 1.什么是分库分表? 把原本存储于一个库的数据分块存储到多个库上 把原本存储于一个表的数据分块存储到多个表上

单机数据库优化

数据库优化有很多可以讲,按照支撑的数据量来分可以分为两个阶段:单机数据库和分库分表,前者一般可以支撑500W或者10G以内的数据,超过这个值则需要考虑分库分表.另外,一般大企业面试往往会从单机数据库问起,一步一步问到分库分表,中间会穿插很多数据库优化的问题.本文试图描述单机数据库优化的一些实践,数据库基于mysql,如有不合理的地方,欢迎指正. 1.表结构优化 在开始做一个应用的时候,数据库的表结构设计往往会影响应用后期的性能,特别是用户量上来了以后的性能.因此,表结构优化是一个很重要的步骤.

MySQL数据库优化详解(收藏)

MySQL数据库优化详解 mysql表复制 复制表结构+复制表数据mysql> create table t3 like t1;mysql> insert into t3 select * from t1;mysql索引 ALTER TABLE用来创建普通索引.UNIQUE索引或PRIMARY KEY索引ALTER TABLE table_name ADD INDEX index_name (column_list)ALTER TABLE table_name ADD UNIQUE (colu