随笔分类 - MySQL
摘要:Cache和Buffer是两个不同的概念,简单的说,Cache是加速“读”,而buffer是缓冲“写”,前者解决读的问题,保存从磁盘上读出 的数据,后者是解决写的问题,保存即将要写入到磁盘上的数据。在很多情况下,这两个名词并没有严格区分,常常把读写混合类型称为buffer cache,本文后续的论述中,统一称为cache。Oracle中的log buffer是解决redo写入的问题,而data buffer cache则解决data block的读写问题。对于Oracle来说,如果IO没有在SGA中命中,都会发生物理IO,Oracle并不关心底层存储的类型,可能是一套存储系 统,可能是本地磁盘
阅读全文
摘要:声明:以下讨论只是针对InnoDB存储引擎。何为死锁?死锁是对资源的分配和使用不当而造成的。是两个进程争夺某一资源而出现相互等待的现象。具体的来讲,出现死锁需要满足四个必要条件:(1)互斥条件:每一个资源都只能被一个进程使用(2)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放(3)不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。(4)循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。很显然,出现死锁需要两个或者两个以上的进程,换句话说,死锁发生在并发的程序中。在Mysql中,由于目前只有InnoDB引擎使用事务(InnoDB支持锁),便有了InnoD
阅读全文
摘要:文章出处:http://dev.mysql.com/doc/refman/5.6/en/range-optimization.html(翻译的有纰漏的地方,请见谅)单列索引的范围查询对于单列索引,索引值的区间可以方便的以相应的WHERE从句中的条件来表示,所以我们谈论范围查询而不是“间隔”。对于单列索引,范围查询条件定义为如下几种情况:1、对于所有的B+树和哈希索引,使用键列和一个常量通过=、<=>、IN()、IS NULL,或者IS NOT NULL等操作符来比较。2、另外的,对于B+ 树索引使用键列和一个常量通过>,<,>=,<=,BETWEEN,!=,
阅读全文
摘要:事务的四个特性1、原子性(atomicity)原子性是指整个数据库事务是不可分割的工作单位2、一致性(consistency)一致性指事务将数据库从一种状态转变为下一种一致的状态。在事务开始之前和事务结束之后,数据库的完整性约束没有被破坏。3、隔离性(isolation)一个事务的影响在该事务提交之前对其他事务都不可见------这通过锁来实现4、持久性(durability)事务一旦提交,其结果就是永久性的事务的实现隔离性通过Mysql InnoDB锁就可以实现,原子性、一致性、持久性通过数据库的redo和undo来完成隐式提交的SQL语句以下这些SQL语句会产生一个隐式的提交操作,即执行完
阅读全文
摘要:Mysql常用存储引擎的锁机制MyISAM和MEMORY采用表级锁(table-levellocking)BDB采用页面锁(page-levelocking)或表级锁,默认为页面锁InnoDB支持行级锁(row-levellocking)和表级锁,默认为行级锁各种锁特点表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生冲突的概率最高,并发度最低行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高页面锁:开销和加锁时间介于表锁和行锁之间;会出现死锁;锁定粒度介于表锁和行锁之间,并发度一般InnoDB存储引擎的锁InnoDB存储引擎实现了如下两种锁1、共享锁(S
阅读全文
摘要:Mysql默认情况下会有两个文件:ib_logfile0和ib_logfile1,这两个文件就是重做日志文件,或者事务日志。重做日志的目的:万一实例或者介质失败,重做日志文件就能派上用场。每个InnoDB存储引擎至少有一个重做日志文件组,每个文件组下至少有2个重做日志文件,如默认的ib_logfile0、ib_logfile1。InnoDB存储引擎先写重做日志文件1,当达到文件的最后时,会切换至重做日志文件2,当重做日志文件2也被写满时,会再被切换到重做日志文件1中。影响重做日志的参数:Innodb_log_file_size、innodb_log_files_in_group、innodb_
阅读全文
摘要:二进制日志记录了所有对数据库执行更改的操作,二进制主要有以下两种作用:1、恢复(recovery)2、复制(replication)二进制日志的启动:配置参数log-bin[=name],如果不指定name,则默认二进制日志文件名为主机名,后缀名为二级制日志的序列号,所在路径为数据库所在目录。以index为后缀的文件为二进制日志的索引文件,用来存储过往生产的二进制日志。和二进制日志相关的参数:max_binlog_size、binlog_cache_size、sync_binlog、binlog-do-db、binlog-ignore-db、log-slave-update、binlog_fo
阅读全文
摘要:InnoDB存储引擎的三个关键特性:插入缓冲(insertbuffer)、二次写(doublewrite)、自适应哈希索引(adaptivehashindex)。1、插入缓冲(insertbuffer)的原理: 对于非聚集索引的插入和更新,不是每一次直接插入索引页中,而是首先判断插入的非聚集索引页是否在缓冲池中,如果在,则直接插入,否则,先放入一个插入缓冲区中。好似欺骗数据库这个非聚集的索引已经插入到叶子节点了,然后再以一定的频率执行插入缓冲和非聚集索引页子节点的合并操作,这时通常能将多个插入合并到一个操作中,这就大大提高了对非聚集索引执行插入和修改操作的性能。 插入缓冲使用的条件: 1...
阅读全文
摘要:InnoDB体系结构如下:后台线程:1、后台线程的主要作用是负责刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据;2、另外,将以修改的数据文件刷新到磁盘文件;3、同时,保证在数据库发生异常的情况下,InnoDB能恢复到正常运行状态。内存池:InnoDB有多个内存块,这些内存块组成了一个大的内存池。这些内存块包括有:缓冲池(innodb_buffer_pool)和日志缓冲(log_buffer)以及额外内存池(innodb_addtional_mem_pool_size)。后台线程:后台默认的线程有7个-----4个IOthread,1个masterthread,1个锁监控线程,1个错误
阅读全文
摘要:1、查看数据库服务器状态:statusLinux下的MySQL服务器状态该列表中主要包括MySQL的版本(为version5.1.61)、运行平台(debian-linux-gnu(i686))、数据库连接的ID、当前连接用户、以及连接的方式(本次连接采用UNIXsocket,而未使用SSL)、服务端的字符集、MySQL运行时间和线程、查询、表的一些参数。Windows下的MySQL服务器状态这个是MySQL5.5的版本。2、了解了MySQL的整体状况之后,就需要了解MySQL支持的存储引擎:showengines;在MySQL5.1的版本中,默认支持的是MyISAM引擎。MySQL5.5支持
阅读全文
摘要:从物理意义上来讲,InnoDB表由共享表空间、日志文件组(redo文件组)、表结构定义文件组成。若将innodb_file_per_table设置为on,则系统将为每一个表单独的生成一个table_name.ibd的文件,在此文件中,存储与该表相关的数据、索引、表的内部数据字典信息。表结构文件则以.frm结尾,这与存储引擎无关。 以下为InnoDB的表空间结构图:在InnoDB存储引擎中,默认表空间文件是ibdata1,初始化为10M,且可以扩展,如下图所示: 实际上,InnoDB的表空间文件是可以修改的,使用以下语句就可以修改:Innodb_data_file_path=ibdata...
阅读全文
摘要:三个月的生活 这几天身体一直有些不舒服,所以借此机会来总结一下过去的这三个月,三个月的生活应该说是忙碌而又充实的,期间做了一些事情,考试、学习、兼职等等。一个一个说吧,首先最头疼的是连续不断的考试,以下是本学期的考试安排: 2012.9.1 数字逻辑与系统设计 2012.10.26 电子商务软件技术 2012.11.1 嵌入式系统软件开发 2012.11.6 24式太极(老师说太过恶心,得补考) 2012.11.7 C#设计模式 2012.11.12 软件测试与评估 2012.11.20 24式太极(补考) 2012.11.27 网络信息安全 2012.12.2 汇编与接口...
阅读全文
摘要:一、 在对网站整体性能进行benchmark时,可以使用多种工具,比如大名鼎鼎的ab(Apache bench),http_load等工具。这里我们不关注他们的使用,如果你想了解,可以去这里。 重点来说MySQL的基准测试如何进行,也有很多种工具来供我们选择,比如mysqlslap、sysbench、Super Smack等,其中mysqlslap的使用MySQL官网给出了介绍,Super Smack是服务器压力测试强有力的工具,那么sysbench便是我们进行MySQL基准测试的很漂亮的工具了。 sysbench是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等...
阅读全文
摘要:Create Table1.创建数据表CREATETABLE`amount`(`id`int(11)NOTNULLAUTO_INCREMENT,`amount`decimal(10,2)DEFAULTNULL,PRIMARYKEY(`id`))ENGINE=InnoDB DEFAULTCHARSET=utf8DELIMITER $$2.创建触发器示例(1)CREATE /*[DEFINER = { user | CURRENT_USER }]*/ TRIGGER `mytest`.`tri_amount2` BEFORE UPDATE ON `mytest`.`amount` FOR EACH
阅读全文
摘要:今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情。当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能。这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库。希望下面的这些优化技巧对你有用。 1. 为查询缓存优化你的查询 大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,..
阅读全文
摘要:mysql 5.5.19版本1、备份备份一个数据库mysqldump -uxxxx -pxxxx --opt dbname > filename.sql备份整个数据库mysqldump -uxxxx -pxxxx --opt --all-databases > filename.sql参数说明: -u 用户名,-p 密码2、恢复恢复一个数据库mysql -uxxxx -pxxxx dbname < filename.sql恢复整个数据库mysql -uxxxx -pxxxx < filename.sql[root@DevDBServer mysql]# mysqldum
阅读全文
摘要:在使用事件之前需要激活MySQL的事件调度器(Event Scheduler),激活方式如下:set global event_scheduler=1或者 set global event_scheduler=on然后我们可以查看调度器是否已经开启: show variables like 'event_scheduler'; 或者select @@event_scheduler;如果我们要关闭调度器则采取相反的动作即可: set global event_scheduler=off;下面总结event的相关处理方法:1 .创建event 命令如下:create event [
阅读全文
摘要:显示本地root用户权限show grants for root@localhost\G;显示任意%域用户权限show grants for root\G;查询所有用户select * from mysq.user;给某个用户授权语法grant all privileges on *.* to a@'%' identified by '123'; //授权所有权利flush privileges; //刷新,使之生效grant 具体权限 on 表 to 用户名@'域' identified by 'password';域包括本地与
阅读全文
摘要:前几天去参加腾讯的面试,在一面中,面试官问了一个问题:会用数据库吗?我说基本的会,然后他说:现在写一个删除一列的sql语句,然后就尴尬了。。。 回来后,决定好好把基本的sql语句好好学一下,再把相关的内容再复习一下。 今天主要看的是MySQL,顺便说一下,不同的数据库之间差距还是蛮大的,比如说SQL Server和MySQL,Oracle和MySQL,言归正传,先说一下,面试官问的那个问题。(以下命令都在Mysql5.5中测试通过) Mysql修改列类型语句如下: alter table 表名 change 列名 列名 要修改的列类型; Mysql修改列名语句如下: alter...
阅读全文

浙公网安备 33010602011771号