随笔分类 - database
摘要:通常情况下,当访问某张表的时候,读取者首先必须获取该表的锁,如果有写入操作到达,那么写入者一直等待读取者完成操作(查询开始之后就不能中断,因此允许读取者完成操作)。当读取者完成对表的操作的时候,锁就会被解除。如果写入者正在等待的时候,另一个读取操作到达了,该读取操作也会被阻塞(block),因为默认的调度策略是写入者优先于读取者。当第一个读取者完成操作并解放锁后,写入者开始操作,并且直到该写入者完成操作,第二个读取者才开始操作。 通过LOCK TABLES和UNLOCK TABLES语句可以显式地获取或释放锁,但是在通常情况下,服务器的锁管理器会自动地在需要的时候获取锁,在不再需要的时候释放.
阅读全文
摘要:第一步:检查系统的状态 通过操作系统的一些工具检查系统的状态,比如CPU、内存、交换、磁盘的利用率、IO、网络,根据经验或与系统正常时的状态相比对,有时系统表面上看起来看空闲,这也可能不是一个正常的状态,因为cpu可能正等待IO的完成。除此之外,还应观注那些占用系统资源(cpu、内存)的进程。1.用vmstat察看关于内核进程,虚拟内存,磁盘,cpu的的活动状态[root@ks01 ~]# vmstatprocs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------r b swpd free bu
阅读全文
摘要:在分析性能欠佳的查询时,应考虑: 1) 应用程序是否正获取超过需要的数据,即访问了过多的行或列。 2) Mysql服务器是否分析了超过需要的行。 如果发现访问的数据行数很大,而生成的结果中数据行很少,那么可以尝试修改,比如使用覆盖索引、更改架构或重写查询让优化器可以以优化的方式执行它。 优化最终集中在减少IO,降低CPU,提高查询速度。 一般应用中数据库通常是IO密集型的,大部分数据库操作中超过90%的时间是由IO操作所占用,所以减少IO访问次数是SQL优化中首要考虑的因素。除了IO外,需要再考虑优化CPU的运算量。通常,ORDER BY、GROUP BY、DISTINCT和一些比较运算都是主
阅读全文
摘要:1.如果索引了多列,遵守最左前缀法则。所谓最左前缀,指的是查询从索引的最左前列开始,并且不跳过索引中的列。mysql> explain select uid, fuid, name from ptb where uid=1378109017;+----+-------------+-------+------+---------------+----------+---------+-------+------+-------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows |
阅读全文
摘要:mysql> show status;Com_xxx 语句计数变量表示每个xxx 语句执行的次数。每类语句有一个状态变量。例如,Com_delete和Com_insert分别统计DELETE 和INSERT语句执行的次数。然而,如果一个查询的结果是从查询缓存中得到的,这会增加Qcache_hits,而不是Com_selectConnections 4192试图连接到(不管是否成功)MySQL服务器的连接数。Created_tmp_disk_tables 0服务器执行语句时在硬盘上自动创建的临时表的数量Created_tmp_files 5mysqld创建的临时文件个数Created_tm
阅读全文
摘要:在使用SHOW PROCESSLIST命令查看当前 MySQL 在进行的线程时,不仅可以显示哪种查询正在执行,也能看到连接的状态。其中一些因素,比如大量连接处于锁定状态,是瓶颈的明显线索。本语句报告TCP/IP连接的主机名称(采用host_name:client_port格式),以方便地判定哪个客户端正在做什么。如果语句不使用FULL关键词,则只显示每个查询的前100个字符。如果你得到“too many connections”错误信息,并且想要了解正在发生的情况,本语句是非常有用的。MySQL保留一个额外的连接,让拥有SUPER权限的 账户使用,以确保管理员能够随时连接和检查系统(假设您没有
阅读全文
摘要:1. 优化数据库对象1)选择表合适存储引擎:MyISAM存储引擎: 应用时以读和插入操作为主,只有少量的更新和删除,并且对事务的完整性,并发性要求不是很高的。 * 表锁:MyISAM表有表级锁,注意不要让它成为瓶颈。 * 不支持自动数据恢复:如果MySQL服务器崩溃或掉电,就应该在使用之前进行检查和执行可能的修复。如果有大型表,这可能会花几个小时。 * 不支持事务:MyISAM表不支持事务。实际上,MyISAM甚至不保证单个命令完成。如果在多行UPDATER的中途有错误发生,一些行会被更新,而另外一些行则不会。 * 只有索引被缓存在内存中:MyISAM只缓存了MySQL进程内部的索引,并保存在
阅读全文
摘要:在MySQL中,联接是一种对表的引用,多表联接类型:1.笛卡尔积(交叉联接):在MySQL中为CROSS JOIN或省略JOIN,如: select * from course, teachcourse; -- 隐式交叉联接或者select * from course join teachcourse或 select * from course cross join teachcourse; 返回结果为被连接的两张表的乘积。因此当有WHERE,ON或USING条件时一般不建议使用。因为数据多太时查询会很慢。一般使用LEFT [OUTER] JOIN或者 RIGHT [OUTER] JOIN。
阅读全文
摘要:前言为了保证数据的一致完整性,任何一个数据库都存在锁定机制。锁定机制的优劣直接应想到一个数据库系统的并发处理能力和性能,所以锁定机制的实现也就成为了各种数据库的核心技术之一。本章将对MySQL中两种使用最为频繁的存储引擎MyISAM和Innodb各自的锁定机制进行较为详细的分析。MySQL锁定机制简介数据库锁定机制简单来说就是数据库为了保证数据的一致性而使各种共享资源在被并发访问访问变得有序所设计的一种规则。对于任何一种数据库来说都需要有相应的锁定机制,所以MySQL自然也不能例外。MySQL数据库由于其自身架构的特点,存在多种数据存储引擎,每种存储引擎所针对的应用场景特点都不太一样,为了满足
阅读全文
摘要:一.MySQL逻辑架构 第一层,即最上一层,所包含的服务并不是MySQL所独有的技术。它们都是服务于C/S程序或者是这些程序所需要的 :连接处理,身份验证,安全性等等。 第二层值得关注。这是MySQL的核心部分。通常叫做 SQL Layer。在 MySQL据库系统处理底层数据之前的所有工作都是在这一层完成的,包括权限判断, sql解析,行计划优化, query cache 的处理以及所有内置的函数(如日期,时间,数学运算,加密)等等。各个存储引擎提供的功能都集中在这一层,如存储过程,触发器,视 图等。 第三层包括了存储引擎。通常叫做StorEngine Layer ,也就是底层数据存取操作实现
阅读全文
posted @ 2013-08-28 21:10
Jevo
摘要:EXPLAIN语句可以用作DESCRIBE的一个同义词,或获得关于MySQL如何执行SELECT语句的信息:EXPLAIN tbl_name是DESCRIBE tbl_name或SHOW COLUMNS FROM tbl_name的一个同义词。· 如果在SELECT语句前放上关键词EXPLAIN,MySQL将解释它如何处理SELECT,提供有关表如何联接和联接的次序。 借助于EXPLAIN,可以知道什么时候必须为表加入索引以得到一个使用索引来寻找记录的更快的SELECT。还可以知道优化器是否以一个最佳次序联接表。为了强制优化器让一个SELECT语句按照表命名顺序的联接次序,语句应以S
阅读全文
摘要:MySQL Query Profiler, 可以查询到此 SQL 语句会执行多少, 并看出 CPU/Memory 使用量, 执行过程 System lock, Table lock 花多少时间等等.从启动Profile之后的所有查询包括错误语句都会被记录。mysql的sql语句优化也可以使用explain,但是执行计划是没有办法知道详细的Memory/CPU等使用量。 SHOW PROFILE [type [, type] ... ] [FOR QUERY n] [LIMIT row_count [OFFSET offset]]type: ALL | BLOCK IO | CONTEXT SW
阅读全文
摘要:MySQL提供标准的SQL模式匹配,SQL模式匹配允许你使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零字符)。。关于SQL模式匹配:http://dev.mysql.com/doc/refman/5.1/zh/tutorial.html#pattern-matching1.MySQL仅仅支持多数正则表达式实现的一个很小的子集。2.SQL模式匹配允许你使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零字符)。;而REGEXP使用扩展正则表达式匹配列值的子串,如果被匹配的文本在列值中出现,REGEXP将会找到它,相应的行将被返回。注意使用SQL模式时,不能使用=或!=;而应
阅读全文
摘要:mysql日志的种类,一般来说,日志有五种,分别为:错误日志:-log-err (记录启动,运行,停止mysql时出现的信息)二进制日志:-log-bin (记录所有更改数据的语句,还用于复制,恢复数据库用)查询日志:-log (记录建立的客户端连接和执行的语句)慢查询日志: -log-slow-queries (记录所有执行超过long_query_time秒的所有查询)更新日志: -log-update (二进制日志已经代替了老的更新日志,更新日志在MySQL 5.1中不再使用)官方文档:http://dev.mysql.com/doc/refman/5.1/zh/database-adm
阅读全文
摘要:1.通过mysqldump命令进行数据备份 mysql数据库的备份采用直接打包数据库文件夹(注:InnoDB引擎不支持直接拷贝数据文件备份数据库,由于使用InnoDB引擎的库或表是不能使用此种方式);或者使用专用的导出工具mysqldump。 通过mysqldump命令可以将指定的库、表或全部的库导出为SQL脚本。A.数据导出: 格式1:导出指定库中的部分表 • Mysqldump[选项]库名 [表名1][表名2] . .>/备份路径/备份文件名 格式2:导出一个或多个完整的库(包括其中所有的表) • Mysqldump[选项]--databases库名1[库名2]… >/备份路径
阅读全文
摘要:MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数。一、整型 整数类型是数据库中最基本的数据类型。标准SQL中支持INTEGER和SMALLINT这两种整数类型。MySQL数据库除了支持这两种类型外,还扩展支持了TINYINT、MEDIUMINT和BIGINT。 各种整数类型的取值范围、存储的字节数如下:整型字节数无符号数的取值范围有符号数的取值范围TINYINT10~255128~127SMALLINT20~65535-32768~12767MEDIUMINT30~16777215-8388608~8388607INT40~4294967295-2...
阅读全文
摘要:MySQL的字符集支持(Character Set Support)有两个方面:字符集(Character set)和排序方式(Collation)。 字符(Character)是指人类语言中最小的表义符号。给定一系列字符,对每个字符赋予一个数值,用数值来代表对应的字符,这一数值就是字符的编码(Encoding)。例如,我们给字符'A'赋予数值0,给字符'B'赋予数值1,则0就是字符'A'的编码; 给定一系列字符并赋予对应的编码后,所有这些字符和编码对组成的集合就是字符集(Character Set)。例如,给定字符列表为{'A'
阅读全文
摘要:自定义函数的格式:CREATE [DEFINER = { user | CURRENT_USER }] FUNCTION sp_name ([func_parameter[,...]]) RETURNS type [characteristic ...] routine_bodyfunc_parameter: param_name typetype: Any valid MySQL data typecharacteristic: LANGUAGE SQL | [NOT] DETERMINISTIC | { CONTAINS SQL | NO SQL | READS SQL DATA | MO
阅读全文
摘要:触发器是一种特殊的存储过程,是嵌入到mysql的一段程序,它在插入,删除或修改特定表中的数据时触发执行。 数据库触发器有以下的作用:1.安全性。可以基于数据库的值使用户具有操作数据库的某种权利,允许或限制对表的修改: # 可以基于时间限制用户的操作,例如不允许下班后和节假日修改数据库数据。 # 可以基于数据库中的数据限制用户的操作,例如不允许股票的价格的升幅一次超过10%。2.提供审计和日志记录。例:跟踪用户对数据库的操作。 # 审计用户操作数据库的语句。 # 把用户对数据库的更新写入审计表,更新日志记录。3.实现复杂的数据完整性规则 # 实现非标准的数据完整性检查和约束。触发器可产生比规则.
阅读全文
摘要:一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。 存储过程通常有以下优点: (1)存储过程在服务器端运行,执行速度快。 (2)存储过程执行一次后,其执行规划就驻留在高速缓冲存储器,在以后的操作中,只需从高速缓冲存储器中调用已编译好的二进制代码执行,提高了系统性能。 (3)确保数据库的安全。使用存储过程可以完成所有数据库操作,并可通过编程方式控制上述操作对数据库信息访问的权限。 (4) 存储过程能过减少网络流量。针对同一个数据库对象的操作(如查询、修改),如果这一操作所涉及的Transaction-SQL语句被组织程存储过程,那么当在客户计算.
阅读全文

浙公网安备 33010602011771号