现在的位置: 首页 > IT运维 > 正文

MySQL编译参数优化

2012年04月07日 IT运维 ⁄ 共 3026字 暂无评论 ⁄ 被围观 436+

Linux下对Nginx编译安装的时候,如果去掉debug选项,生成的目标文件将会小很多,运行效率将会高很多。MySQL像Nginx及很多Linux软件一样,有这样的选项可以去掉或者优化,可以使编译的目标文件很小,提高运行效率和减少资源占用。以下对这些选项做个介绍,不足之处请大家多多补充,共同完善:

static参数,静态链接

参数使用方法:

--with-client-ldflags=-all-static
--with-mysqld-ldflags=-all-static

静态链接提高13%性能

pgcc参数,Intel处理器优化标记

使用方法: 命令行设置环境变量

CFLAGS="-O3 -mnocona -mstack-align-double"
CXX=gcc
CXXFLAGS="-O3 -mnocona -mstack-align-double -felide-constructors -fno-exceptions -fno-rtti"

如果是Intel处理器,使用pgcc提高1%性能

64位平台的编译环境变量:

CFLAGS="-O3 -fPIC -mnocona -mstack-align-double"
CXX=gcc
CXXFLAGS="-O3 -mnocona -mstack-align-double -felide-constructors -fno-exceptions -fno-rtti"
或
CFLAGS="-O3"
CXX=gcc
CXXFLAGS="-O3 -felide-constructors -fno-exceptions -fno-rtti -fomit-frame-pointer -ffixed-ebp"

CFLAGS设置参见http://gcc.gnu.org/onlinedocs/gcc-4.4.0/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options

Unix Socket,Unix套接字

参数设置

--with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock

使用Unix套接字链接提高7.5%性能,所以在Windows下Mysql性能肯定不如Unix下面。PHP-CGI在使用时也是一样的,使用端口监听模式不如使用Unix套接字模式效率高。

--enable-assembler参数,汇编x86的普通操作符

--enable-assembler参数允许编译x86(和sparc)版本普通操作符, 对多个方面的性能产生直接影响.

with-big-tables参数,大记录数表支持

不使用该参数时,MyISAM表的最大记录数被限制到42亿(2^32次方)条。编译时增加--with-big-tables参数,可以将最大记录数增加到((2^32次方)^2次方)条。

其他几条参数

  1. --with-ssl
  2. --with-extra-charsets=complex字符支持
  3. --enable-thread-safe-client #Compile the client with threads. 让客户端支持线程的意思
  4. --with-embedded-server #编译成embedded MySQL library (libmysqld.a),
  5. --enable-local-infile #让mysql支持从本地文件导入数据库

    如果不使用该参数,在导入本地文件时,将会出错:

    load data local infile \'/usr/test\' into table test fields terminated by \' \';
    ERROR 1148 (42000): The used command is not allowed with this MySQL version)
  6. --with-plugins=innobase存储引擎

    Mysql5.1开始,编译添加innodb插件就从 --with-innodb 改成了 --with-plugins=innobase

  7. --with-plugins=PLUGIN[[[,PLUGIN..]]]参数,插件编译参数

    该参数将需要编译到MySQl的插件包含了,不使用该参数时,不编译任何插件。

    如果多个插件,可以写成:--with-plugins=partition,blackhole,heap,innobase,myisam,ndbcluster 用逗号分开

编译安装示例:

./configure --prefix=/web/mysql #指定安装目录 
--without-debug #去除debug模式 
--enable-local-infile #让mysql支持从本地文件导入数据库
--with-big-tables #打开超大数据表支持
--with-charset=utf8 #默认utf8字符集
--with-extra-charsets=gb2312 #添加gb2312中文字符支持
--with-collation=utf8_general_ci --with-extra-charsets=all 
--with-mysqld-user=mysql 
--with-plugins=partition,myisammrg #同时编译partition myisammrg插件
--with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock #设置unix socket路径
--without-ndb-debug #去掉集群debug模式
--enable-assembler #使用一些字符函数的汇编版本 
--without-isam #去掉isam表类型支持 现在很少用了 isam表是一种依赖平台的表 
--without-innodb #去掉innodb表支持 innodb是一种支持事务处理的表,适合企业级应用,对于普通应用来说过于消耗资源
--with-pthread #强制使用pthread库(posix线程库) 
--enable-thread-safe-client #以线程方式编译客户端 
--with-client-ldflags=-all-static  
--with-mysqld-ldflags=-all-static #以纯静态方式编译服务端和客户端 
make 
make install 
scripts/mysql_install_db #生成mysql用户数据库和表文件 

cp support-files/mysql.server /etc/init.d/mysqld #copy启动的mysqld文件 
chmod 700 /etc/init.d/mysqld 
cd /web 
chmod 750 mysql -R 
chgrp mysql mysql -R 
chown mysql mysql/var -R 
cd /web/mysql/libexec 
cp mysqld mysqld.old 
strip mysqld 
chkconfig --add mysqld 
chkconfig --level 345 mysqld on 
service mysqld start 
ln -s /web/mysql/bin/mysql /sbin/mysql 
ln -s /web/mysql/bin/mysqladmin /sbin/mysqladmin

给我留言

您必须 [ 登录 ] 才能发表留言!

×
#