对性能的认识起点: 最近在处理艾格的项目,客户一直反映网站的性能有问题。经过分析,发现客户的所反映的性能问题大多出现在DB层(读与写).

 

艾格网站使用的是MAGENTO,因此DB的默认引擎是INNODB.

 

 

INNODB所集中产生的问题:

 

连接以及thread

 

在前台以及后台读取速度慢

 

读取时,解析失败

 
exception 'PDOException' with message 'SQLSTATE[70100]: <<Unknown error>>: 1317 Query execution was interrupted' 

 

 

 

 

晚上并发插入数据出现大量的事务以及锁

 

报错提示:

 

Next exception 'Zend_Db_Statement_Exception' with message 'SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction'

 

外键约束导致写入表失败

Next exception 'Zend_Db_Statement_Exception' with message 
'SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`sales_flat_quote_shipping_rate`, CONSTRAINT `FK_SALES_QUOTE_SHIPPING_RATE_ADDRESS` FOREIGN KEY (`address_id`) REFERENCES `sales_flat_quote_address` (`address_id`) ON DELETE CASC)' 

 

出现死锁

 

 
Next exception 'Zend_Db_Statement_Exception' with message 'SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction' 

 

 

INNODB所生成的临时表生成失败

 

 
Next exception 'Zend_Db_Statement_Exception' with message 'SQLSTATE[42S02]: Base table or view not found: 1146 Table 'catalog_category_flat_store_1' doesn't exist' 

 

 

在写入数据表时,临时表写入失败

exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 126 Incorrect key file for table '/tmp/#sql_6bf7_1.MYI'; try to repair it' 

 

 

写入数据时,出现ACID事务隔离失败

'SQLSTATE[23000]: 
Integrity constraint violation: 1452 Cannot add or update a child row: 
a foreign key constraint fails (`sales_flat_quote_shipping_rate`, CONSTRAINT `FK_SALES_QUOTE_SHIPPING_RATE_ADDRESS` 
FOREIGN KEY (`address_id`) REFERENCES `sales_flat_quote_address` (`address_id`) ON DELETE CASC)' 

 

 

 
Next exception 'Zend_Db_Statement_Exception' with message 'SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction' 

 

Next exception 'Zend_Db_Statement_Exception' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1' 

 

 

 

提高Performance之前需要准备的数据信息

包括几个方面: 整合WEB应用层的性能的测试数据

                  硬件承载量的测试

                  MYSQL数据库层的性能测试数据

 

 

整合WEB应用层的性能的测试数据

并发量(某一段时间内,用户的访问量是多少)

什么时间段是访问的高峰期以及读取写入期

 

 

网站各个功能的测试:

在开发之间,就应该完成性能分析功能

1.各种action,URL执行的执行时间(最好记录到数据库中,以知道在整个系统中,哪个功能以及模块在正常PV量访问也有问题)

2.WEB页面的整体访问速度

3.每一个查询的时间

4. 应用程序与数据库的连接时间

5. 对于外部资源的调用时间(JS,CSS,前端的加载速度)

6. 潜在的高性能开销处理----XML的处理

 

 

 

 

额外测试

对于splider(invisible)的执行时间(Splider在固定页面数的grap时间)

 

 

 

硬件的测试(系统的整体性测试)

CPU (sysbench)

IO设备的测试

硬盘等存储设备的IO读写速度(sysbench)

连续写的性能(测试CPU的高速缓存)

 

 

 

MYSQL数据库层的性能测试数据

 

基本的数据信息获取

读取

MYSQL访问最多的数据表(如电子商务中的订单,商品表等)

执行最多的查询种类(连接查询,子查询,单表查询)

查询或者是使用最多的子系统或者是模块

 

 

mysqlslap

sysbench

Database Test suite

MySql Benchmarck suite

super smack

 

慢日志

---正常的数据:: 排除 锁 日志等

 

 

事务

OLTP(每单位时间内的事务处理量)----sysbench来测试

 

事务数总计

每秒事务处理量(最大,最小响应时间)

 

 

写入

1.正常单个插入(并且开户bin log,log),服务器的正常响应时间(应该包括有两个数据: 客户端--终端显示的响应时间  以及 真正的数据库的响应时间)

2.并发同时插入,如同时有100条SQL插入时,服务器的正常响应时间.

 

 

IO读写的测试

使用方式: vmstat, iostat, mpstat, strace 在操作系统层面中的测试

 

测试所需要得到的数据

1. 硬件,磁盘(特别是数据库文件)在正常访问量情况下的读写速度是多少

2. 在高峰期(不同时段,以秒为单位,不同的日期内), 读取,写入,等待的时间各是多少

3. 分别获得在普通正常访问量下,高访问量(或者是写入量)的情况下,对于数据库文件,bin log, error log, slow query log等写入的时间

 

网络情况

对于网络流量来进行监控

 

 

 

INNODB 状态的即时监控

show INNODB STATUS (自动的写入到新的数据表中)

即时查看时, FLUSH STATUS;

 

SHOW SESSION STATUS LIKE 'Select%';

 

 

查看硬件消耗

SHOW PROFILE

 

 

 

 

 

 

 

 

 

 

SQL语句的性能以及测试

慢日志查询

 

 

 

 

 

 

 

 

服务器端参数的分析

 

connectionthread

 

 

thread

 

thread_cache_size

thread_connected

 

 

 

INNODB

索引

 

查询缓存

 

表缓存

 

写入

 

MYISAM

 

 

 

posted on 2013-01-29 14:27  myjavawork  阅读(461)  评论(0编辑  收藏  举报