内部系统优化笔记(一)

第一天 优化准备

开启mysql 慢查询日志选项,用于搜集执行较慢的sql语句;

打开方法:

找到my.ini,在[mysqld]下边加入下边参数来启动慢查询日志选项

开启慢查询日志

log-slow-queries="D:/pms_mysql_data/slowQ.log"

记录超过2秒的select sql

long_query_time=2

重启mysql服务;


考虑到,数据库中的表基本没有索引,所以第一步就是为表增加索引;

增加索引后,磁盘占用空间肯定会增加,所以首先检查一下磁盘空间;

检查结果是,mysql data所在空间的空余容量仅有7G

所以需要做data目录迁移;

操作方法:

停掉mysql服务;

D盘创建mysql_data目录;

并将原data目录下的所有东西copy to d:/mysql_data下;

打开my.ini,修改datadir="D:/mysql_data/",令其指向新创建的目录;

启动mysql服务;

测试,OK; 


第二天 创建索引

首先分析采集到的慢查询日志;

慢查询日志分析工具,利用mysql自带的mysqldumpslow.pl,这是一个perl脚本;

进入cmd,进入mysql bin目录

输入如下命令:

mysqldumpslow.pl -s c -t 10 slowQ.log

此时,在控制台会出现top10 sql语句;

mysqldumpslow.pl详细使用说明,使用mysqldumpslow.pl -help查看

得到top10后,开始逐一分析;

第三天 将历史数据转移至历史表

将关闭项目及项目的相关数据转移至历史表

select * from proj where proj_state<>1(项目状态为关闭)

mysql复制表语句;

create table new_table_name select * from old_table_name;(复制表结构与表数据)

然后清除表中记录,删除前关闭mysql 外键约束检查;

set foreign_key_checks = 0;//关闭外键约束

set foreign_key_checks = 1;//开启外键约束

foreign_key_checks系统变量是session级的;


详细策划;

通过heidisql工具查看与项目相关记录较多的表;

包括:projproj_tasktask_detailstask_trace_itemproj_cal;

历史表命名规则:his_tablename

脚本:

-- 查看当前表记录数

select

 (select count(*)  from proj) as 项目表记录数 

,(select count(*)  from proj_task) as 任务表记录数

,(select count(*)  from task_detail) as 任务计划表记录数

,(select count(*)  from task_trace_item) as 任务保存表记录数

,(select count(*)  from proj_cal) as 项目日历表记录数


-- 迁移proj

create table his_proj select * from proj where proj_state <> 1;

-- 迁移proj_task

create table his_proj_task select * from proj_task where proj_id in (select proj_id from proj where proj_state <> 1);

-- 迁移task_detail

create table his_task_detail select * from task_detail where proj_id in (select proj_id from proj where proj_state <> 1);

-- 迁移task_trace_item

create table his_task_trace_item select * from task_trace_item where proj_id in (select proj_id from proj where proj_state <> 1);

-- 迁移proj_cal

create table his_proj_cal select * from proj_cal where proj_id in (select proj_id from proj where proj_state <> 1);

第四天 重点检查tmplst,checkdata表,有什么用

checkdata表的主要作用的是同步企业信息化系统的员工打卡记录,由于公司在20129月更换了打卡系统,所以原有的打卡同步操作就没有意义了,而且公司可能会在2013年重建一套打卡查询系统,所以该表目前已经没有什么存在的价值了;

通过分析得知,系统中有部分查询功能与该表关联,所以将该表的所有数据迁移至his_checkdata表中;

create table his_checkdata select * from checkdata;

truncate checkdata;

itsm_inth表为小itil系统接口表,由于20124月份,公司内部已换用其他itil系统,所以该表没有存在的价值了,迁移至his_itsm_intf表中;

create table his_itsm_intf select * from itsm_intf;

truncate itsm_intf;

tmplst表的主要作用是记录项目模块的层级关系,主要为了显示“好看”,没有其他用途,但通过检查了解到,这个表的insert逻辑非常古怪,不知道开发人员当时是怎么思考的,逻辑大体是这样,新增项目后,系统自动生成一个名为“所有模块”的模块,模块id是自增字段,如果自增字段为2000的话,那么tmplst表中会为该项目增加2000条模块记录,不知道这位开发人员咋想的;谨慎的检查后果断去掉所有相关逻辑。

未完...

你可能感兴趣的:(优化,mysql)