随笔分类 -  MySQL

摘要:一、关于一个SQL的简单的工作过程 1、工作前提描述 1、启动MySQL,在内存中分配一个大空间innodb_buffer_pool(还有log_buffer) 2、多用户线程连接MySQL,从内存分配用户工作空间(其中排序空间) 3、磁盘上有数据库文件、ib_logfile、tmp目录、undo 阅读全文
posted @ 2017-07-20 20:08 GeaoZhang 阅读(8980) 评论(1) 推荐(2) 编辑
摘要:案例描述: 通过iostat发现存储的写性能长期维持在10MB左右,而且因为写性能差已经导致数据库性能变差; 两个小时以后,iostat发现系统的写性能已经能够到100MB以上,数据库性能也恢复正常。 也就是说,在对系统、数据库监控中,出现了性能波谷,存储写入性能严重抖动,为什么? 一、原理过程 由 阅读全文
posted @ 2017-07-15 20:50 GeaoZhang 阅读(3577) 评论(1) 推荐(2) 编辑
摘要:案例描述: 一个普通的事务提交,在应用里面会提示commit超时,失败。 一、理论知识 1、关于commit原理,事务提交过程 1、寻找修改的数据页: 1、如果该数据页在内存中,则直接是内存读; 2、如果该数据页内存中没有,物理读,就从磁盘调入内存; 2、磁盘中的undo页调入内存; 3、先将原来的 阅读全文
posted @ 2017-07-14 19:32 GeaoZhang 阅读(4121) 评论(1) 推荐(0) 编辑
摘要:一、存储结构分析 MySQL存储结构图: 解析: 1、读操作:内存读-->cache缓存读-->磁盘物理读 读取到的数据会按上述顺序往回送。 2、写操作:内存数据直接写入cache缓存(非常快)-->写入disk 由上可知,MySQL之所以读写速度快,cache在其中起到了关键作用。 1、Cache 阅读全文
posted @ 2017-07-12 21:00 GeaoZhang 阅读(20315) 评论(6) 推荐(1) 编辑
摘要:Q:innodb buffer pool和Qcache的缓存区别? A: 1、Qcacche缓存的是SQL语句及对应的结果集,缓存在内存,最简单的情况是SQL一直不重复,那Qcache的命令率肯定是0; 2、buffer pool中缓存的是整张表中的数据,缓存在内存,SQL再变只要数据都在内存,那么 阅读全文
posted @ 2017-07-10 21:17 GeaoZhang 阅读(3617) 评论(3) 推荐(0) 编辑
摘要:一、SQL执行过程 1、用户连接数据库,执行SQL语句; 2、先在内存进行内存读,找到了所需数据就直接交给用户工作空间; 3、内存读失败,也就说在内存中没找到支持SQL所需数据,就进行物理读,也就是到磁盘中查找; 4、找到的数据放到内存中,在内存进行数据过滤再放到会话工作空间。 5、假设会话工作空间 阅读全文
posted @ 2017-07-09 20:58 GeaoZhang 阅读(2273) 评论(2) 推荐(3) 编辑
摘要:0、概念理解:用户会话和连接线程是什么关系? 用户会话和用户连接线程是一一对应的关系,一个会话就一个用户连接线程。 问题描述: 如果系统因为执行了一个非常大的dml或者ddl操作导致系统hang住,我们想断掉这个操作,怎么办? 解决办法: 1、kill thread:杀死用户的会话 但是时间长,效果 阅读全文
posted @ 2017-07-08 20:15 GeaoZhang 阅读(7098) 评论(1) 推荐(1) 编辑
摘要:Q:何为“数据库”? A: 也就是说数据库实例,“数据库” = 数据库软件 + 数据库:存于磁盘中 1、数据库里面存表:放置在datadir目录下 2、软件是用来管理数据库的:放置在basedir目录下 3、数据库工作原理概述 用户连接到数据库里,对数据库进行操作,将磁盘里数据库中的数据读取到内存中 阅读全文
posted @ 2017-07-08 19:36 GeaoZhang 阅读(1991) 评论(0) 推荐(0) 编辑
摘要:Q:如何判断一个Linux系统具备安装MySQL的条件? A: 1、Linux网络已经配置完成 ip地址/子网掩码、默认网关、主机名字 /etc/hosts:访问这个数据库的应用的IP地址和主机名字也要添加到hosts文件中,主从服务器解析也要添加到hosts文件 /etc/resolv.conf: 阅读全文
posted @ 2017-07-07 20:30 GeaoZhang 阅读(2925) 评论(0) 推荐(1) 编辑
摘要:一、源码安装 1、经典的源代码安装三步曲: 1、编译前的配置 ./configure 2、编译 make 3、安装 make install 2、源代码软件安装步骤: 1、下载软件包 2、校验软件包 3、解包 4、进入解包得到的目录 5、认真阅读README和INSTALL文件 6、按照README 阅读全文
posted @ 2017-06-02 20:41 GeaoZhang 阅读(833) 评论(0) 推荐(1) 编辑
摘要:……继上一篇MySQL的开发总结之后,适当的练习还是很有必要的…… SQL语法多变,不敢保证唯一,也不敢保证全对,如果错误欢迎指出,即刻修改。 一、现有表结构如下图 TABLENAME:afinfo Id name age birth sex memo 1 徐洪国 37 1979-03-23 男 高 阅读全文
posted @ 2017-05-11 10:01 GeaoZhang 阅读(9694) 评论(0) 推荐(9) 编辑
摘要:实验环境: mysql> status mysql Ver 14.14 Distrib 5.7.14, for Linux (x86_64) using EditLine wrapper …… (截图取材于标准MySQL5.7官方文档--没有盗版) 1、修改自增长变量值 通过变量的修改,现在的自增长 阅读全文
posted @ 2017-05-10 18:44 GeaoZhang 阅读(749) 评论(2) 推荐(0) 编辑
摘要:一、理解MySQL基本概念 1、MySQL软件:MySQL实际上就是一软件,是一工具,是关系型数据库管理系统软件 2、MySQL数据库:就是按照数据结构来组织、存储和管理数据的仓库 3、MySQL数据库实例: ①MySQL是单进程多线程(而oracle是多进程),也就是说MySQL实例在系统上表现就 阅读全文
posted @ 2017-05-10 15:05 GeaoZhang 阅读(13121) 评论(7) 推荐(6) 编辑
摘要:Q:假设,有一个需求,希望在某一个时刻系统调用一个begin end执行一下;十分钟以后执行一下begin end。亦或有一个需求,每个多长时间周期性执行begin end。那么这个时候该怎么办呢? A: 在Linux里面可以使用at、crontab来实现上面的需求;MySQL里面也有这样的方法,就 阅读全文
posted @ 2017-05-07 18:12 GeaoZhang 阅读(12545) 评论(0) 推荐(3) 编辑
摘要:阅读目录:触发器trigger的使用 创建触发器 单一执行语句、多执行语句 new、old详解 查看触发器 删除触发器:慎用触发器,不用就删除 Q:什么是触发器? A: 触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。 触发器的特性: 1、有begin end体,b 阅读全文
posted @ 2017-05-07 10:10 GeaoZhang 阅读(201993) 评论(7) 推荐(52) 编辑
摘要:一、存储过程的查询 1、通过数据字典表查询 存储过程的定义信息保存在数据字典表information_schema.routines中: 2、使用show语句查询 SHOW PROCEDURE STATUS WHERE db='数据库名'; 3、查看存储过程详细的定义信息 SHOW CREATE P 阅读全文
posted @ 2017-05-06 18:57 GeaoZhang 阅读(37533) 评论(0) 推荐(0) 编辑
摘要:Q:为什么要使用游标? A: 在存储过程(或函数)中,如果某条select语句返回的结果集中只有1行,可以使用select into语句(上几篇博客有介绍到用法)来得到该行进行处理;如果结果集中有多行,简单的select语句成批地进行处理,需要在检索出来的行中前进或后退一行或多行……若是想得到其中的 阅读全文
posted @ 2017-05-06 18:39 GeaoZhang 阅读(8447) 评论(0) 推荐(4) 编辑
摘要:阅读目录:存储过程的异常处理 定义异常处理 单一异常处理程序 continue exit 多个异常处理程序 关于错误编号和SQLSTATE码 使用3个处理程序 忽略某一异常的处理 异常处理的命名 异常传播 Q:何为异常? A:程序在执行过程中有可能出错,运行时错误叫做异常。 默认情况下,当存储过程运 阅读全文
posted @ 2017-05-05 19:03 GeaoZhang 阅读(38306) 评论(3) 推荐(7) 编辑
摘要:在MySQL存储过程中使用SELECT …INTO语句为变量赋值: 用来将查询返回的一行的各个列值保存到局部变量中。 要求: 查询的结果集中只能有1行。 SELECT col_name[,...] INTO var_name[,...] table_expr 使用SELECT …INTO语句在数据库 阅读全文
posted @ 2017-05-05 18:01 GeaoZhang 阅读(31048) 评论(0) 推荐(0) 编辑
摘要:1、MySQL创建函数语法: 注意:自定义函数不能跨库使用 由上述例子,不难看出,自定义函数的创建其实和create存储过程还是很相似的。 2、函数调用 自定义函数虽然在创建定义上和存储过程类似,但调用时却有些许的不一样。 在我们调用函数的时候,函数需要出现在 = 的右边(也就是说调用函数需要有变量 阅读全文
posted @ 2017-05-04 20:01 GeaoZhang 阅读(2556) 评论(0) 推荐(1) 编辑