body{
line-height:200%;
}
如何优化MySQL数据库
当MySQL数据库邂逅优化,它有好几个意思,今天我们所指的是性能优化。
我们究竟该如何对MySQL数据库进行优化呢?下面我就从MySQL对硬件的选择、Mysql的安装、mycnf的优化、MySQL如何进行架构设计及数据切分等方面来说明这个问题。
1服务器物理硬件的优化
1)磁盘(I/O),MySQL每一秒钟都在进行大量、复杂的查询 *** 作,对磁盘的读写量可想而知,所以推荐使用RAID1+0磁盘阵列,如果资金允许,可以选择固态硬盘做RAID1+0;
2)cpu对Mysql的影响也是不容忽视的,建议选择运算能力强悍的CPU。
2MySQL应该采用编译安装的方式
MySQL数据库的线上环境安装,我建议采取编译安装,这样性能会较大的提升。
3MySQL配置文件的优化
1)skip
-name
-resolve,禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间;
2)back_log
=
384,back_log指出在MySQL暂时停止响应新请求之前,短时间内的多少个请求可以被存在堆栈中,对于Linux系统而言,推荐设置小于512的整数。
3)如果key_reads太大,则应该把mycnf中key_buffer_size变大,保持key_reads/key_read_requests至少在1/100以上,越小越好。
4MySQL上线后根据status状态进行适当优化
1)打开慢查询日志可能会对系统性能有一点点影响,如果你的MySQL是主-从结构,可以考虑打开其中一台从服务器的慢查询日志,这样既可以监控慢查询,对系统性能影响也会很小。
2)MySQL服务器过去的最大连接数是245,没有达到服务器连接数的上限256,应该不会出现1040错误。比较理想的设置是:Max_used_connections/max_connections
100%
=85%
5MySQL数据库的可扩展架构方案
1)MySQL
cluster,其特点为可用性非常高,性能非常好,但它的维护非常复杂,存在部分Bug;
2)DRBD磁盘网络镜像方案,其特点为软件功能强大,数据可在底层块设备级别跨物理主机镜像,且可根据性能和可靠性要求配置不同级别的同步。
前言 目前所有使用Oracle作为数据库支撑平台的应用 大部分数据量比较庞大的系统 即表的数据量一般情况下都是在百万级以上的数据量 当然在Oracle中创建分区是一种不错的选择 但是当你发现你的应用有多张表关联的时候 并且这些表大部分都是比较庞大 而你关联的时候发现其中的某一张或者某几张表关联之后得到的结果集非常小并且查询得到这个结果集的速度非常快 那么这个时候我考虑在Oracle中创建 临时表 我对临时表的理解 在Oracle中创建一张表 这个表不用于其他的什么功能 主要用于自己的软件系统一些特有功能才用的 而当你用完之后表中的数据就没用了 Oracle的临时表创建之后基本不占用表空间 如果你没有指定临时表(包括临时表的索引)存放的表空的时候 你插入到临时表的数据是存放在ORACLE系统的临时表空间中(TEMP) 临时表的创建 创建Oracle临时表 可以有两种类型的临时表 会话级的临时表和事务级的临时表 )会话级的临时表因为这这个临时表中的数据和你的当前会话有关系 当你当前SESSION不退出的情况下 临时表中的数据就还存在 而当你退出当前SESSION的时候 临时表中的数据就全部没有了 当然这个时候你如果以另外一个SESSION登陆的时候是看不到另外一个SESSION中插入到临时表中的数据的 即两个不同的SESSION所插入的数据是互不相干的 当某一个SESSION退出之后临时表中的数据就被截断(truncate table 即数据清空)了 会话级的临时表创建方法 Create Global Temporary Table Table_Name(Col Type Col Type ) On Commit Preserve Rows 举例create global temporary table Student(Stu_id Number( ) Class_id Number( ) Stu_Name Varchar ( ) Stu_Memo varchar ( )) on Commit Preserve Rows ; )事务级临时表是指该临时表与事务相关 当进行事务提交或者事务回滚的时候 临时表中的数据将自行被截断 其他的内容和会话级的临时表的一致(包括退出SESSION的时候 事务级的临时表也会被自动截断) 事务级临时表的创建方法 Create Global Temporary Table Table_Name(Col Type Col Type ) On Commit Delete Rows 举例 create global temporary table Classes(Class_id Number( ) Class_Name Varchar ( ) Class_Memo varchar ( )) on Commit delete Rows ; ) 两种不通类型的临时表的区别 语法上 会话级临时表采用on mit preserve rows而事务级则采用on mit delete rows 用法上 会话级别只有当会话结束临时表中的数据才会被截断 而且事务级临时表则不管是mit rollback或者是会话结束 临时表中的数据都将被截断 例子 ) 会话级(Session关闭掉之后数据就没有了 当Commit的时候则数据还在 当Rollback的时候则数据也是一样被回滚) insert into student(stu_id class_id stu_name stu_memo) values( 张三 福建 );insert into student(stu_id class_id stu_name stu_memo) values( 刘德华 福州 );insert into student(stu_id class_id stu_name stu_memo) values( S H E 厦门 );SQL> select from student ;STU_ID CLASS_ID STU_NAME STU_MEMO 张三 福建 刘德华 福州 S H E厦门 张惠妹 厦门SQL> mit;Commit pleteSQL> select from student ;STU_ID CLASS_ID STU_NAME STU_MEMO 张三 福建 刘德华 福州 S H E厦门 张惠妹 厦门SQL>insert into student(stu_id class_id stu_name stu_memo) values( 张惠妹 厦门 ); row insertedSQL> select from student ;STU_ID CLASS_ID STU_NAME STU_MEMO 张三 福建 刘德华 福州 S H E厦门 张惠妹 厦门 张惠妹 厦门SQL> rollback ;Rollback pleteSQL> select from student ;STU_ID CLASS_ID STU_NAME STU_MEMO 张三 福建 刘德华 福州 S H E厦门 张惠妹 厦门SQL> ) 事务级(Commit之后就删除数据) 本例子将采用以下的数据 insert into classes(Class_id Class_Name Class_Memo) values( 计算机 );insert into classes(Class_id Class_Name Class_Memo) values( 经济信息 );insert into classes(Class_id Class_Name Class_Memo) values( 经济信息 );在一个SESSION中(比如SQLPLUS登陆)插入上面 条记录 然后再以另外一个SESSION(用SQLPLUS再登陆一次)登陆 当你select from classes;的时候 classes表是空的 而你再第一次登陆的SQLPLUS中select的时候可以查询到 这个时候你没有进行mit或者rollback之前你可以对刚才插入的 条记录进行update delete等 *** 作 当你进行mit或者rollback的时候 这个时候由于你的表是事务级的临时表 那么在插入数据的session也看不到数据了 这个时候数据就已经被截断了 运行结果如下 SQL> insert intoclasses(Class_id Class_Name Class_Memo) values( 计算机 ); row insertedSQL> insert into classes(Class_id Class_Name Class_Memo) values( 经济信息 ); row insertedSQL> insert into classes(Class_id Class_Name Class_Memo) values( 经济信息 ); row insertedSQL> update classes set class_memo = where class_id= ; row updatedSQL> select from classes ;CLASS_ID CLASS_NAME CLASS_MEMO 计算机 经济信息 经济信息SQL> delete from classes where class_id= ; row deletedSQL> select from classes ;CLASS_ID CLASS_NAME CLASS_MEMO 计算机 经济信息 SQL> mit;Commit pleteSQL> select from classes ;CLASS_ID CLASS_NAME CLASS_MEMO SQL>再重复插入一次 然后rollback SQL> Rollback ;Rollback pleteSQL> select from classes ;CLASS_ID CLASS_NAME CLASS_MEMO SQL> 临时表的应用 ) 当某一个SQL语句关联的表在 张及以上 并且和一些小表关联 可以采用将大表进行分拆并且得到比较小的结果集合存放在临时表中 ) 程序执行过程中可能需要存放一些临时的数据 这些数据在整个程序的会话过程中都需要用的等等 注意事项 ) 临时表的索引以及对表的修改 删除等和正常的表是一致的 ) Oracle的临时表是Oracle i才支持的功能特性 如果你的Oracle版本比较低的话 那么就可能没有办法用到了 如果你的Oracle版本是 i的话 你还需要把$ORACLE_HOME/admin/${ORACLE_SID}/pfile目录下的init<ORACLE_SID> ora初始参数配置文件的patible修改为patible = 我的服务器上就是这样子配置的 当然也可以修改为patible = 以上是我在对大表进行优化的时候采用的一些手段 效果显著 lishixinzhi/Article/program/Oracle/201311/18437
以上就是关于数据库如何优化全部的内容,包括:数据库如何优化、Oracle临时表 优化查询速度、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)