如何分析 MySQL 负载

2010-08-25 15:35:21 | 作者:haijd

编辑 MySQL 配置文件"my.cnf",加上以下几行:

log_slow_queries=/usr/local/mysql/data/log_slow_queries.log //慢语句日志保存目录
long_query_time=10 //记录SQL查询超过10S的语句
log-queries-not-using-indexes=1 //记录没有使用索引的sql

这样,慢语句就被记录在日志文件中了。

日志中的四个参数"Query_time: 0 Lock_time: 0 Rows_sent: 1 Rows_examined: 54",分别代表"查询时间"、"锁定时间"、"查询结果行数"、"扫描行数"。

负载分析工具有"mytop-1.6.tar.gz"和"innotop-1.6.0.tar.gz",其它要看"show global status"、"show engine innodb status"、"vmstat"等命令。

MySQL 优化教程

2010-03-11 14:57:44 | 作者:haijd

影响 MySQL 性能的系统变量

2010-03-11 14:57:02 | 作者:haijd

来源:MySQL Performance Blog

bulk_insert_buffer_size

批量插入缓存大小,这个参数是针对MyISAM存储引擎来说的。适用于在一次性插入100-1000+条记录时,提高效率。默认值是8M。可以针对数据量的大小,翻倍增加。

concurrent_insert

并发插入,当表没有空洞(删除过记录),在某进程获取读锁的情况下,其他进程可以在表尾部进行插入。值可以设0不允许并发插入,1当表没有空洞时,执行并发插入,2。不管是否有空洞都执行并发插入。默认是1。针对表的删除频率来设置。

让MySQL记录执行过的SQL语句

2009-10-21 14:23:32 | 作者:haijd

在"my.cnf"文件中的“[mysqld]”段添加以下设置:

log = /tmp/mysql.log

重启 MySQL 后,就可以在“/tmp/mysql.log”中看到所有执行的 SQL 记录了。

在Python中向MySQL批量插入数据的方法

2008-09-01 22:51:49 | 作者:haijd

使用Python操作MySQL数据库时,如果插入的数据条目很多,一条条地执行"insert...into"语句可能会导致"connection error",正确的办法是使用"executemany"。如下所示:

T = (('s11', 1), ('s21', 2))
cursor = conn.cursor()
cursor.executemany("insert into table (str_column, int_column) values (%s, %s)", T)

在Python中使用MySQL的示例

2008-09-01 22:47:01 | 作者:haijd

前提条件:至"sourceforge.net"下载"mysql-python"包,并进行安装。

#!/usr/local/bin/python
# -*- coding: utf-8 -*-

# 加载模块
import sys
import MySQLdb

# 设置默认编码为UTF-8,否则从数据库
# 读出的UTF-8数据无法正常显示
reload(sys)
sys.setdefaultencoding('utf-8')

# 连接数据库
conn = MySQLdb.Connection(host="localhost", user="root", passwd="", charset="UTF8")
conn.select_db('test')

# 创建指针,并设置数据的返回模式为字典
cursor = conn.cursor(MySQLdb.cursors.DictCursor)

# 执行SQL
cursor.execute("select * from table")

# 处理数据
for row in cursor.fetchall():
    print row

# 关闭指针
cursor.close()

# 关闭数据库连接
conn.close()

实例讲解MySQL联合查询

2010-03-07 23:15:07 | 作者:haijd

作者:kimi
原文地址:http://www.ccvita.com/index.php/208.html

首先我们假设有2个表A和B,他们的表结构和字段分别为:

表A:

ID  Name
 1  Tim
 2  Jimmy
 3  John
 4  Tom

表B:

ID  Hobby
 1  Football
 2  Basketball
 2  Tennis
 4  Soccer

MySQL Left Join,Right Join

2010-03-07 23:15:29 | 作者:haijd

作者:kimi
原文地址:http://www.ccvita.com/index.php/207.html

在SQL标准中规划的(Join)联结大致分为下面四种:

1、内联结

将两个表中存在联结关系的字段符合联结关系的那些记录形成记录集的联结。

2、外联结

分为外左联结和外右联结。

MySQL数据库配置技巧

2010-03-07 23:37:05 | 作者:haijd

  用root用户启动远程服务一直是安全大忌,因为如果服务程序出现问题,远程攻击者极有可能获得主机的完全控制权。MySQL从3.23.15版本开始时作了小小的改动,默认安装后服务要用mysql用户来启动,不允许root用户启动。如果非要用root用户来启动,必须加上--user=root的参数(./safe_mysqld --user=root &)。因为MySQL中有LOAD DATA INFILE和SELECT ... INTO OUTFILE的SQL语句,如果是root用户启动了MySQL服务器,那么,数据库用户就拥有了root用户的写权限。不过MySQL还是做了一些限制的,比如LOAD DATA INFILE只能读全局可读的文件,SELECT ... INTO OUTFILE不能覆盖已经存在的文件。

摘自:http://hi.baidu.com/thinkinginlamp/blog/item/c947fdfa91c3fbdeb48f3187.html
作者:老王

  PHP程序员应该都知道连接MySQL数据库可以使用mysql_pconnect(永久连接)函数,使用数据库永久连接可以提高效率,但是实际应用中数据库永久连接往往会导致出现一些问题,通常的表现就是在大访问量的网站上时常发生断断续续的无法连接数据库的情况,出现类似"Too many connections in …"的错误提示信息,重新启动服务器又正常了,但过不了一会儿又出现同样的故障。对于这些问题的成因,恐怕就不是每个人都能说清楚的了,虽然PHP文档里有一些相关资料,但是解释的并不浅显易懂,这里我厚着脸皮试图做一个简单的讨论,所述观点不见得全都正确,欢迎大家反馈意见。