Browsing the archives for the 数据库优化 tag

Tokyo Cabinet Key-Value数据库及其扩展应用PPT[原创]

in 数据库类

以下是我4月2日在“2010年数据库技术大会”的演讲PPT,介绍了 Tokyo Cabinet Key-Value 数据库的性能优化关键参数,以及金山逍遥网在Tokyo Cabinet基础上实现的TCSQL实时列表缓存数据库(Version 1.3)。 点击下载dtcc_tc_tt_tcsql.pdf

0 Comments

MySQL优化篇-查询优化

in mysql

可以参考一下官方文档中的解释。 http://dev.mysql.com/doc/refman/5.1/zh/optimization.html 7. 优化 7.1. 优化概述 7.1.1. MySQL设计局限与折衷 7.1.2. 为可移植性设计应用程序 7.1.3. 我们已将MySQL用在何处? 7.1.4. MySQL基准套件 7.1.5. 使用自己的基准 7.2. 优化SELECT语句和其它查询 7.2.1. EXPLAIN语法(获取SELECT相关信息) 7.2.2. 估计查询性能 7.2.3. SELECT查询的速度 7.2.4. MySQL怎样优化WHERE子句 7.2.5. 范围优化 7.2.6. 索引合并优化 7.2.7. MySQL如何优化IS NULL 7.2.8. MySQL如何优化DISTINCT 7.2.9. MySQL如何优化LEFT JOIN和RIGHT JOIN 7.2.10. MySQL如何优化嵌套Join 7.2.11. MySQL如何简化外部联合 7.2.12. MySQL如何优化ORDER BY 7.2.13. MySQL如何优化GROUP BY 7.2.14. MySQL如何优化LIMIT 7.2.15. 如何避免表扫描 7.2.16. INSERT语句的速度 [...]

0 Comments

MySQL分区技术 分享

in mysql

通过分区(Partition)提升MySQL性能
——MySQL5.1新特性翻译系列
几年前,俺写过一篇题为“The Foundation of Excellent Performance”的文章(现在仍然可以在http://www.tdan.com/i016fe03.htm看到),俺对SQL语句是影响数据库驱动系统性能的第一要素的观点有点质疑。其实在那时我在文章中就坚信数据库的物理设计在对高级数据库的性能影响上远比其他因素重要。同时俺还给大家看了Oracle的研究,他们解释了为什么拙劣的物理设计是数据库停机(无论是有计划的还是没计划的)背后的主要原因。这么多年都过来啦(幸好没多少人朝俺扔砖头),俺的观点是改变了一些,但在这点上俺还是坚持DBA如果想要高性能的数据库就必须在数据库的物理设计上多思考的观点,这样才能减少响应时间使终端用户满意而不是引来骂声一片。(陈朋奕语:不要那么严肃,嘿嘿)
俺今天这么激动又想写文章的原因是MySQL5.1的发布带来了设计超强动力数据库的强有力的武器,任何MySQL的DBA都应该尽快学习并使用它。俺觉得如果能很好滴使用这个5.1版带来的新特性,DBA可以使自己管理的VLDB(不知道什么是VLDB?告诉你,是好大好大的数据库的意思,Very Large DB)或数据仓库奇迹般的获得巨大的性能提升。

0 Comments

SHOW INDEX语法 查看索引状态

in mysql

SHOW INDEX FROM tbl_name [FROM db_name]

  SHOW INDEX会返回表索引信息。其格式与ODBC中的SQLStatistics调用相似。

  SHOW INDEX会返回以下字段:

  · Table

  表的名称。

  · Non_unique

  如果索引不能包括重复词,则为0。如果可以,则为1。

  · Key_name

  索引的名称。

  · Seq_in_index

  索引中的列序列号,从1开始。

  · Column_name

  列名称。

  · Collation

  列以什么方式存储在索引中。在MySQL中,有值‘A’(升序)或NULL(无分类)。

  · Cardinality

  索引中唯一值的数目的估计值。通过运行ANALYZE TABLE或myisamchk -a可以更新。基数根据被存储为整数的统计数据来计数,所以即使对于小型表,该值也没有必要是精确的。基数越大,当进行联合时,MySQL使用该索引的机会就越大。

  · Sub_part

  如果列只是被部分地编入索引,则为被编入索引的字符的数目。如果整列被编入索引,则为NULL。

  · Packed

  指示关键字如何被压缩。如果没有被压缩,则为NULL。

  · Null

  如果列含有NULL,则含有YES。如果没有,则该列含有NO。

  · Index_type

  用过的索引方法(BTREE, FULLTEXT, HASH, RTREE)。

  · Comment

  多种评注。

  您可以使用db_name.tbl_name作为tbl_name FROM db_name语法的另一种形式。这两个语句是等价的:

  mysql> SHOW INDEX FROM mytable FROM mydb;

  mysql> SHOW INDEX FROM mydb.mytable;

  SHOW KEYS是SHOW INDEX的同义词。您也可以使用mysqlshow -k db_name tbl_name命令列举一个表的索引。

  SHOW INNODB STATUS语法

  SHOW INNODB STATUS

  在MySQL 5.1中,这是SHOW ENGINE INNODB STATUS的同义词,但不赞成使用。

Changed limits: max_open_files: 2048 max_connections: 1024 table_cache: 507

in mysql

Changed limits: max_open_files: 2048 max_connections: 1024 table_cache: 507

这个问题怎么解决啊!

在windows下安装Mysql系统日志出现 max_open_files: 2048 max_connections: 510 table_cache: 764 类似错误是因为 max_connections 最大连接数和max_open_files、table_cache 不匹配。适当的降低max_connections 或调整其他两个数值
解决办法在 mysql bin > 中输入
mysql-nt –table_cache=764
mysql-nt –innodb_open_files=2048 即可!!

table_cache和max_connections 在my.ini 里可调

0 Comments

MySql Query Cache 查询缓存介绍(1)

in mysql

MySql Query Cache 和 Oracle Query Cache 是不同的, Oracle Query Cache 是缓存执行计划的,而MySql Query Cache 不缓存执行计划而是整个结果集。缓存整个结果集的好处不言而喻,但由于缓存的是结果集因此Query必须是完全一样的,这样带来的后果就是平均 Hit Rate 命中率一般不会太高。 Query Cache 对于一些小型应用程序或者数据表的数据量不大的情况下效果是最为明显的。

0 Comments

MySQL 性能优化(show processlist中出现大量未认证的连接 建立连接缓慢 unauthenticated user)

in mysql

症状:
MySQL重启后,发现连接非常慢,建立连接后做普通操作还是非常快的,通过Show processlist发现大量unauthenticated user连接

解决办法:
MySQL启动参数增加一个skip-name-resolve,即不启用DNS反响解析

解决过程(推荐学习 :)

1. 同一局域网不同机器上连接MySQL服务器,观察响应速度;(非常慢)
2. 连接建立后做一些简单的操作(非常快 和上面不符,说明不是服务器压力导致的)
3. 通过tcpdump查看连接的时候详细的响应过程(能看到连接的时候和服务器的多次通讯及所耗费的时间)
4. 发现正常响应很快,用户名、密码发送完后很长一段时间服务器才给响应
5. 在服务器上进行同样的连接连接操作,试着分别用IP和机器名去连接看响应速度(看是不是IP解析的时候耗费时间了)
6. 修改/etc/hosts文件,加入服务器、客户端的IP对应(没有作用 :( )
7. 增加启动参数skip-name-resolve速度立即加快了(问题解决)

根据status信息对MySQL服务器进行优化

in mysql

网上有很多的文章教怎么配置MySQL服务器,但考虑到服务器硬件配置的不同,具体应用的差别,那些文章的做法只能作为初步设置参考,我们需要根据自己的情况进行配置优化,好的做法是MySQL服务器稳定运行了一段时间后运行,根据服务器的”状态”进行优化。

mysql> show global status;

可以列出MySQL服务器运行各种状态值,另外,查询MySQL服务器配置信息语句:

mysql> show variables;

0 Comments

通过分区(Partition)提升MySQL性能

in mysql

什么是数据库分区?

  数据库分区是一种物理数据库设计技术,DBA和数据库建模人员对其相当熟悉。虽然分区技术可以实现很多效果,但其主要目的是为了在特定的SQL操作中减少数据读写的总量以缩减响应时间。
分区主要有两种形式://这里一定要注意行和列的概念(row是行,column是列)

  1. 水平分区(Horizontal Partitioning)这种形式分区是对表的行进行分区,通过这样的方式不同分组里面的物理列分割的数据集得以组合,从而进行个体分割(单分区)或集体分割(1个或多个分区)。所有在表中定义的列在每个数据集中都能找到,所以表的特性依然得以保持。

0 Comments

MYSQL数据库系统的设计架构

in mysql

通过这幅图学习mysql数据库的系统设计架构
1。Client。包括Mysql Process和Client applications
2。Mysql Server 。包括Mysqld Threads,Storage Engine ,Queay Process ,TCP/IP Threads etc.
3。Database。包括各种Db files

0 Comments