设为首页 加入收藏

TOP

数据库学习之--Oracle架构与MySQL架构对比(二)
2015-07-24 09:45:27 来源: 作者: 【 】 浏览:4
Tags:数据库 习之 --Oracle 架构 MySQL 对比
,给与了SQL优化极大的自由,对CPU、内存、IO资源进行方方面面的优化。

MySQL:最大的一个特色,就是自由选择存储引擎。每个表都是一个文件,都可以选择合适的存储引擎。常见的引擎有 InnoDB、 MyISAM、 NDBCluster等。但由于这种开放插件式的存储引擎,比如要求数据库与引擎之间的松耦合关系。从而导致文件的一致性大大降低。在SQL执行优化方面,也就有着一些不可避免的瓶颈。在多表关联、子查询优化、统计函数等方面是软肋,而且只支持极简单的HINT。

SQL Server :数据架构基本是纵向划分,分为:Protocol Layer(协议层), Relational Engine(关系引擎), Storage Engine(存储引擎), SQLOS。SQL执行过程就是逐层解析的过程,其中Relational Engine中的优化器,是基于成本的(CBO),其工作过程跟Oracle是非常相似的。在成本之上也是支持很丰富的HINT,包括:连接提示、查询提示、表提示

?

安装

Oracle采用OUI的安装模式,在任何操作系统上安装界面一致

\

\

MySQL安装可以选择源码包安装和二进制安装模式,操作系统不同安装方式也不同

http://blog.csdn.net/lqx0405/article/details/46443259

Binary 版本安装:

?

shell> groupadd mysql   
shell> useradd -r -g mysql mysql   
shell> cd /usr/local   
shell> tar zxvf /path/to/mysql-VERSION-OS.tar.gz   
shell> ln -s full-path-to-mysql-VERSION-OS mysql   
shell> cd mysql   
shell> chown -R mysql .   
shell> chgrp -R mysql .   
shell> scripts/mysql_install_db --user=mysql   
shell> chown -R root .   
shell> chown -R mysql data   
# Next command is optional   
shell> cp support-files/my-medium.cnf /etc/my.cnf   
shell> bin/mysqld_safe --user=mysql &  

?

源码包安装:

?

shell> groupadd mysql   
shell> useradd -r -g mysql mysql   
# Beginning of source-build specific instructions   
shell> tar zxvf mysql-VERSION.tar.gz   
shell> cd mysql-VERSION   
shell> cmake .   
shell> make   
shell> make install   
# End of source-build specific instructions   
# Postinstallation setup   
shell> cd /usr/local/mysql   
shell> chown -R mysql .   
shell> chgrp -R mysql .   
shell> scripts/mysql_install_db --user=mysql   
shell> chown -R root .   
shell> chown -R mysql data   
# Next command is optional   
shell> cp support-files/my-medium.cnf /etc/my.cnf   
shell> bin/mysqld_safe --user=mysql &  

?

三、系统架构

1、Oracle 体系架构

\\

\

?

\

?

2、MySQL体系架构

\\

由:连接池组件、管理服务和?工具组件、sql接口组件、查询分析器组件、优化器组件、缓冲组件、插件式存储引擎、物理?文件组成。mysql是独有的插件式体系结构,各个存储引擎有自己的特点。

\\

innodb存储引擎:

面向oltp(online transaction processing)、行锁、支持外键、非锁定读、默认采用repeaable级别(可重复读)通过next- keylocking策略避免幻读、插入缓冲、二次写、自适应哈希索引、预读myisam存储引擎:不支持事务、表锁、全文索引、适合olap(在线分析处理),其中myd:放数据文件,myi:放索引文件ndb存储引擎:集群存储引擎,share nothing,可提高可用性memory存储引擎:数据存放在内存中,表锁,并发性能差,默认使用哈希索引

InnoDB 存储引擎的线程与内存池

InnoDB体系结构如下

?

\\

后台线程:

1、后台线程的主要作用是负责刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据;

2、另外,将以修改的数据文件刷新到磁盘文件;

3、同时,保证在数据库发生异常的情况下,InnoDB能恢复到正常运行状态。

内存池:InnoDB有多个内存块,这些内存块组成了一个大的内存池。这些内存块包括有:缓冲池(innodb_buffer_pool)和日志缓冲(log_buffer)以及额外内存池(innodb_addtional_mem_pool_size)。

\\

后台线程:后台默认的线程有7个-----4个IO thread,1个master thread,1个锁监控线程,1个错误监控线程,但是在mysql5.5以及innodb plugin版本中,默认IO线程均增加到了4个,读写线程分别用参数innodb_read_io_thread和innodb_write_io_thread来表示。

\ \

Mysql5.1 innodb_version 为1.0.7

可以看到有1个Insert buffer thread ,1个log thread,4个read thread,4个write thread。

\ \

或者直接通过查看变量 ‘innodb_%threads’来查看。

\\

Mysql5.5 innodb_version 为1.1.8

\\

Mysql5.5 innodb的线程和Innodb plugin的情况类似。

\ \

Master thread在主循环中,分两大部分操作:每秒钟的操作和每10秒钟的操作:

每秒一次的操作包括:

1、日志缓冲刷新到磁盘,即使这个事务还没有提交(总是),这点解释了为什么再大的事务commit时都很快!

2、合并插入缓冲(可能)

合并插入并不是每秒都发生,InnoDB会判断当前一秒内发生的IO次数是否小于5,如果是,则系统认为当前的IO压力很小,可以执行合并插入缓冲的操作。

3、至多刷新100InnoDB的缓冲池的脏页到磁盘(可能)

这个,刷新100个脏页也不是每秒都在做

每10秒一次的操作包括:

1、刷新100个脏页到磁盘(可能)。

2、合并至多5个插入缓冲(总是)。

3、将日志缓冲刷新到磁盘(总是)。

4、删除无用的undo页(总是)。

5、产生一个检查点(checkpoing)。

?

四、innodb 表空间

Oracle的数据存储有表空间、段、区、块、数据文件;MySQL InnoDB的存储管理也类似,但是MySQL增加了一个共享表空间和独立表空间的概

首页 上一页 1 2 3 4 下一页 尾页 2/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇数据清洗小记:分类进行字符串转.. 下一篇数据清洗小记:字符串转日期:时..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Redis on AWS:Elast (2025-12-27 04:19:30)
·在 Spring Boot 项目 (2025-12-27 04:19:27)
·使用华为开发者空间 (2025-12-27 04:19:24)
·Getting Started wit (2025-12-27 03:49:24)
·Ubuntu 上最好用的中 (2025-12-27 03:49:20)