当前位置:文档之家› 优化mysql数据库性能

优化mysql数据库性能

为了提高性能建议作如下优化修改:优化mysql数据库性能的参数:(1)、max_connections:允许的同时客户的数量。

增加该值增加mysqld 要求的文件描述符的数量。

这个数字应该增加,否则,你将经常看到too many connections错误。

默认数值是16384,请根据实际情况设置此参数。

(2)、key_buffer_size:索引块是缓冲的并且被所有的线程共享。

key_buffer_size是用于索引块的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写),到你能负担得起那样多。

如果你使它太大,系统将开始换页并且真的变慢了。

默认数值是10M,请根据实际情况设置此参数。

(3)、sort_buffer:每个需要进行排序的线程分配该大小的一个缓冲区。

增加这值加速order by或group by操作。

默认数值是256K,请根据实际情况设置此参数。

4)、table_cache:为所有线程打开表的数量。

增加该值能增加mysqld要求的文件描述符的数量。

mysql对每个唯一打开的表需要2个文件描述符。

默认数值是256,,请根据实际情况设置此参数。

(5)、thread_cache_size:可以复用的保存在中的线程的数量。

如果有,新的线程从缓存中取得,当断开连接的时候如果有空间,客户的线置在缓存中。

如果有很多新的线程,为了提高性能修改这个变量值。

通过比较connections 和threads_created 状态的变量,可以看到这个变量的作用。

默认数值是8,请根据实际情况设置此参数。

注:以上参数的调整可以通过修改C:\AppServ\MySQL\my.ini 文件并重启mysql 实现。

这是一个比较谨慎的工作,上面的结果只供参考,请根据具体主机的硬件情况(特别是内存大小)进一步修改。

优化配置文件:C:\zxin10\Was\tomcat\conf\ server.xml(6)、在server.xml中修改标红相关参数。

<Connector port="8080" maxHttpHeaderSize="8192"maxThreads="150" minSpareThreads="25" maxSpareThreads="75"enableLookups="false" redirectPort="8443" acceptCount="100"connectionTimeout="20000" disableUploadTimeout="true"useBodyEncodingForURI="true"URIEncoding="GBK" />(7)、<Connector port="8443" maxHttpHeaderSize="8192"maxThreads="150" minSpareThreads="25" maxSpareThreads="75"enableLookups="false" disableUploadTimeout="true"acceptCount="100" scheme="https" secure="true"clientAuth="false" sslProtocol="TLS" />(8)、在applicationContext.xml 中修改标红相关参数。

C:\zxin10\Was\tomcat\webapps\crbt\WEB-INF\ applicationContext.xml<!-- 数据源管理--><bean id="dataSource" class="boPooledDataSource"><property name="driverClass" value="com.mysql.jdbc.Driver" ></property><property name="jdbcUrl" value="jdbc:mysql://localhost:3306/crbt?autoReconnect=true"></property><property name="user" value="root" ></property><property name="password" value="root" ></property><property name="maxPoolSize" value="50"></property><property name="minPoolSize" value="10"></property><property name="numHelperThreads" value="10"></property><property name="maxStatements" value="200"></property><property name="maxStatementsPerConnection" value="10"></property></bean>(9) 、(10)、如果MySQL依然崩溃,应作些什么正式发布之前,每个MySQL版本均在很多平台上进行了测试。

这不表示MySQL中不存在缺陷,但是,如果存在缺陷,它们应很少,而且很难发现。

如果你遇到问题,如果你尝试找出导致系统崩溃的准确原因,这始终很有帮助,这是因为,如果这样的话,快速解决问题的机会很大。

首先,应尝试找出问题是否与mysqld服务器有关,或是否与客户端有关。

通过执行mysqladmin version,可检查mysqld服务器运行了多长时间。

如果mysqld宕机并重启,应查看服务器的错误日志以找出原因。

请参见5.11.1节,“错误日志”。

在某些系统上,在错误日志中,可发现mysqld宕机的堆栈跟踪,可使用resolve_stack_dump 程序解决它。

请参见E.1.4节,“使用堆栈跟踪”。

注意,错误日志中的变量值并非始终是100%正确的。

很多服务器崩溃是因损坏的数据文件或索引文件而导致的,每次执行完SQL语句之后并在向客户端通告结果之前,MySQL将使用write()系统调用更新磁盘上的文件(如果你使用了“--delay-key-write”选项,情况并非如此,此时将写入数据文件而不是索引文件)。

这意味着,即使mysqld崩溃,数据文件的内容也是安全的,这是因为操作系统能保证将未刷新的数据写入磁盘。

使用“--flush”选项启动mysqld,这样,每次执行完SQL语句后,可强制MySQL将所有内容写入磁盘。

前述介绍表明,在正常情况下不会出现损坏的表,除非出现了下述情况之一:在更新过程中,MySQL服务器或服务器主机被停止。

你发现了mysqld中存在的1个缺陷,该缺陷导致mysqld在更新中途中止。

在mysqld操作的同时,某些外部程序正在操控数据文件或索引文件,未恰当锁定表。

你正使用系统上的相同数据目录运行很多mysqld服务器,该系统不支持良好的文件系统锁定(通常是由lockd锁定管理器负责的),或使用“--skip-external-locking”选项运行了多个服务器。

崩溃的数据文件或索引文件,其中包含导致mysqld混乱的损坏很严重的数据。

在数据存储节点发现缺陷。

这种可能性不大,但至少是可能的。

在该情况下,可在修复的表副本上,通过使用ALTER TABLE,尝试将表类型更改为另一种存储引擎。

由于很难得知为什么某事会出现崩溃,首先请检查用于其他方面的事项是否崩溃。

请尝试采取下述措施:用mysqladmin shutdown停止mysqld服务器,从数据目录运行myisamchk --silent --force */*.MYI,检查所有的MyISAM表,并重启mysqld。

这样,就能确保从干净的状态运行服务器。

请参见第5章:数据库管理。

使用“--log”选项启动mysqld,并根据写入日志的信息确定是否某些特殊的查询杀死了服务器。

约95%的缺陷与特定的查询有关。

正常情况下,这是服务器重启前日志文件中最够数个查询中的1个。

请参见5.11.2节,“通用查询日志”。

如果能够用特殊查询重复杀死MySQL,即使在发出查询前检查了所有表的情况下也同样,那么你就应能确定缺陷,并应提交关于该缺陷的缺陷报告。

请参见1.7.1.3节,“如何通报缺陷和问题”。

尝试提供一个测试范例,我们应能利用该范例重复问题。

请参见E.1.6节,“如果出现表崩溃,请生成测试案例”。

请在mysql-test目录下并根据MySQL基准进行测试。

请参见27.1.2节,“MySQL测试套件”。

它们能相当良好地测试MySQL。

你也可以为基准测试增加代码,以模拟你的应用程序。

基准测试可在源码分发版的sql-bench目录下找到,对于二进制分发版,可在MySQL安装目录下的sql-bench目录下找到。

尝试使用fork_big.pl脚本(它位于源码分发版的测试目录下)。

如果你将MySQL配置为调试模式,如果某事出错,可更为容易地搜集关于可能错误的信息。

如果将MySQL配置为调试模式,可生成1个安全的内存分配程序,可使用它发现某些错误。

此外,它还提供了很多输出,这类输出与出现的问题相关。

在configure上使用“--with-debug”或“--with-debug=full”选项重新配置MySQL,然后再编译它。

相关主题