版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据库程序员面试分模拟题2简答题1.
在Undo表空间数据文件丢失的情况下如何恢复?正确答案:恢复大约可以分为3种情况:①有备份,这种情况下直接采用备份的文件进行恢复即可;②无备份但是有完整的归档(江南博哥)文件存在,这种情况下可以使用命令“ALTERDATABASECREATEDATAFILE文件号AS'/u01/app/oracle/oradata/lhrdb/undotbs01.dbf'size50m;”来创建丢失的Undo文件,然后使用“RECOVERDATAFILE文件号;”进行数据库文件恢复即可;③无备份,归档文件丢失,在这种情况下的恢复比较复杂。首先应该切换Undo表空间到一个新建的Undo表空间中,并设置原有表空间的管理模式为手动管理模式,然后将隐含参数“_OFFLINE_ROLLBACK_SEGMENTS”设置为TRUE,一些关键性的命令如下:
ALTERSYSTEMSETUNDO_TABLESPACE=UNDOTBS2SCOPE=SPFILE;
ALTERSYSTEMSETUNDO_MANAGEMENT=MANUALSCOPE=SPFILE;
ALTERSYSTEMSET"_OFFLINE_ROLLBACK_SEGMENTS"=TRUESCOPD=SPFILE;
ALTERSYSTEMSET"_CORRUPTED_ROLLBACK_SEGMENTS"='_SYSSMU1$','_SYSSMU2$'SCOPE=SPFILE;
CREATEUNDOTABLESPACEUNDOTBS1DATAFILE'/u03/app/oracte/oradata/ora1024g/undotbs01.dbf'SIZE50MAUTOEXTENDON;
ALTERSYSTEMSETUNDO_TABLESPACE=UNDOTES1
SCOPE=SPFILE;
ALTERSYSTEMSETUNDO_MANAGEMENT=AUTO
SCOPE=SPFILE;
ALTERSYSTEMRESET"_OFFLINE_ROLLBACK_SEGMENTS"SCOPE=SPFILESID='*';
ALTERSYSTEMRESET"_CORRUPTED_ROLLBACK_SEGMENTS"SCOPE=SPFILESID='*';[考点]RMAN
2.
什么是间隙(Next-Key)锁?正确答案:当使用范围条件而不是相等条件检索数据的时候,并请求共享或排它锁时,InnoDB会给符合条件的已有数据记录的索引项加锁;对于键值在条件范围内但并不存在的记录,叫作“间隙(GAP)”,InnoDB也会对这个“间隙”加锁,这种锁机制就是所谓的间隙(Next-Key)锁。间隙锁是InnoDB中行锁的一种,但是这种锁锁住的不止一行数据,它锁住的是多行,是一个数据范围。间隙锁的主要作用是为了防止出现幻读(PhantomRead),用在Repeated-Read(简称RR)隔离级别下。在Read-commited(简称RC)下,一般没有间隙锁(有外键情况下例外,此处不考虑)。间隙锁还用于恢复和复制。
间隙锁的出现主要集中在同一个事务中先DELETE后INSERT的情况,当通过一个条件删除一条记录的时候,如果条件在数据库中已经存在,那么这个时候产生的是普通行锁,锁住这个记录,然后删除,最后释放锁。如果这条记录不存在,那么问题就来了,数据库会扫描索引,发现这个记录不存在,这个时候的DELETE语句获取到的就是一个间隙锁,然后数据库会向左扫描,扫到第一个比给定参数小的值,向右扫描,扫描到第一个比给定参数大的值,然后以此为界,构建一个区间,锁住整个区间内的数据,一个特别容易出现死锁的间隙锁就诞生了。
在MySQL的InnoDB存储引擎中,如果更新操作是针对一个区间的,那么它会锁住这个区间内所有的记录,例如,UPDATEXXXXWHEREIDBETWEENAANDB,那么它会锁住A到B之间所有记录,注意是所有记录,甚至这个记录并不存在也会被锁住,这个时候,如果另外一个连接需要插入一条记录到A与B之间,那么它就必须等到上一个事务结束。典型的例子就是使用AUTO_INCREMENTID,由于这个ID是一直往上分配的,因此,当两个事务都INSERT时,会得到两个不同的ID,但是这两条记录还没有被提交,因此,也就不存在,如果这个时候有一个事务进行范围操作,而且恰好要锁住不存在的ID,就是触发间隙锁问题。所以,MySQL中尽量不要使用区间更新。InnoDB除了通过范围条件加锁时使用间隙锁外,如果使用相等条件请求给一个不存在的记录加锁,那么InnoDB也会使用间隙锁!
间隙锁也存在副作用,它会把锁定范围扩大,有时候也会带来麻烦。如果要关闭,那么一是将会话隔离级别改到RC下,或者开启innodb_locks_unsafe_for_binlog(默认是OFF)。间隙锁只会出现在辅助索引上,唯一索引和主键索引是没有间隙锁。间隙锁(无论是S还是X)只会阻塞INSERT操作。
在MySQL数据库参数中,控制间隙锁的参数是innodb_locks_unsafe_for_binlog,这个参数的默认值是OFF,也就是启用间隙锁,它是一个布尔值,当值为TRUE时,表示DISABLE间隙锁。[考点]锁
3.
如何在执行恢复的时候将数据文件恢复到别的路径?正确答案:主要采用命令“setnewnamefordatafile”和“switchdatafileall;”。[考点]RMAN
4.
如何插入单引号到数据库表中?正确答案:可以用ASCII码处理,其他特殊字符如&也一样,如下:
INSERTINTOTVALUES('I'||CHR(39)||'m');
--CHR(39)代表字符'
或者用两个单引号表示一个:
INSERTINTOTVALUES('I"m');
--两个"可以表示一个'
5.
密码延迟验证是什么?如何屏蔽?正确答案:从Oracle11g开始,如果一个用户使用不正确的密码尝试登录数据库,那么随着登录失败次数的增加,每次登录验证前延迟等待的时间也会增加。
通过设置EVENTS28401可以屏蔽密码延迟验证:
ALTERSYSTEMSETEVENT='28401TRACENAMECONTEXTFOREVER,LEVEL1'SCOPE=SPFILE;
设置该事件后重启数据库即可。关于28401事件的解释如下:
[oracle@orclalhr~]$oerrora284D1
28401,00000,"Eventtodisabledelayafterthreefailedloginattempts"
//*Document:NO
//*Cause:N/A
//*Action:Setthiseventinyourenvironmenttodisablethelogindelay
//
whichwillotherwisetakeplaceafierthreefailedloginattempts.
//*Note:THISISNOTAUSERERRORNUMBER/MESSAGE.THISDOESNOTNEEDTOBE
//
TRANSLATEDORDOCUMENTED.
对于正常的系统,由于密码的更改,可能存在某些被遗漏的客户端,不断重复尝试使用错误密码登录数据库,从而引起数据库内部长时间的“librarycachelock”或“rowcachelock”的等待,这种情形非常常见。这种现象在Oracle10.2和11.1中体现的等待事件为“rowcachelock”,而在Oracle11.2中体现的等待事件为“librarycachelock”。
当出现这类问题时,非常典型的AWR报告呈现如下。首先在TOP5中,可能会看到显著的librarycachelock的等待,以下范例来自Oracle版本的真实情况:
若数据库版本小于11.2,则在AWR中可能的情况如下:
在这类情况下,时间模型(TimeModelStatistics)中会显示如下指标,其中,“connectionmanagementcallelapsedtime”占据了主要的DBTime,这个等待直接表明是在建立数据库连接时产生的:
此外,在AWR中的DictionaryCacheStats部分也可以看到很明显的等待。
此问题在MOS上相应的文档为“High'librarycachelock'WaitTimeDuetoInvalidLoginARempts(1309738.1)”。此外,从Oracle11g开始,开启了密码大小写验证,如果数据库是从Oracle10g升级或迁移过来的,那么需要特别地注意这个变化,可以通过初始化参数SEC_CASE_SENSITIVE_LOGON来控制这个特性。[考点]用户
6.
什么是SQL语言?SQL有哪些特点?正确答案:SQL(StructureQueryLanguage,结构化查询语言)是一种在关系型数据库中定义和操纵数据的标准语言。关系型数据库采用SQL作为客户端程序与数据库服务器间沟通的标准接口。客户端发送SQL指令到服务器端,服务器端执行相关的指令并返回其查询的结果。在数据库服务器端执行的SQL指令可以实现各种数据库操作和管理功能,例如,数据的查询和更新(包括添加、修改和删除数据)操作;创建、修改和删除各种数据库对象(如数据表、视图、索引等);数据库用户账户管理、权限管理等。
关系数据语言的共同特点:语言具有完备的表达能力,是非过程化的集合操作语言,功能强,能够嵌入高级语言中使用。[考点]SQL分类
7.
Linux下如何查看系统启动时间和运行时间?正确答案:可以用uptime和查看/proc/uptime文件。
1)uptime命令
输出:16:11:40up59days,4:21,2users,loadaverage:0.00,0.01,0.00
2)查看/proc/uptime文件计算系统启动时间
cat/proc/uptime
输出:5113396.94575949.85
第一数字即是系统己运行的时间5113396.94秒,运用系统工具date即可算出系统启动时间。
date-d"$(awk-F'{print$1}'/proc/uptime)secondago"+"%Y-%m-%d%H:%M:%S"
输出:2008-11-0911:50:31
3)查看/proc/uptime文件计算系统运行时间
more/proc/uptime|awk-F.'{run_days=$1/86400;run_hour=($1%86400)/3600;run_minute=($1%3600)/60;run_second=$1%60;printf("系统已运行:%d天%d时%d分%d秒\n",run_days,run_hour,run_minute,run_second)}'
输出:系统已运行:59天4时13分9秒
此外,还可以使用如下命令查询:
who-b查看最后一次系统启动的时间
who-r查看当前系统运行时间
lastreboot可以看到Linux系统历史启动的时间
top命令的up后表示系统到目前运行了多久时间
w命令的up后表示系统到目前运行了多久时间
8.
MySQL中的索引有什么优点?正确答案:索引(Index)是数据库优化中最常用也是最重要的手段之一,通过索引通常可以帮助用户解决大多数的SQL性能问题。索引是帮助MySQL高效获取数据的数据结构,它用于快速找出在某个列中含有某一特定值的行。如果不使用索引,那么MySQL必须从第1条记录开始读完整个表直到找出相关的行。表越大,花费的时间越多。如果表中查询的列有一个索引,那么MySQL就能快速到达一个位置去搜寻数据文件的中间,没有必要看所有数据。
索引在MySQL中也叫作“键(Key)”,是存储引擎用于快速找到记录的一种数据结构。总体来说,索引有如下几个优点:
1)索引大大减少了服务器需要扫描的数据量。
2)索引可以帮助服务器避免排序和临时表。
3)索引可以将随机I/O变为顺序I/O。[考点]索引
9.
E-R图向关系模型的转换一般遵循哪些原则?正确答案:E-R图向关系模型的转换一般遵循如下原则:
1)一个实体型转换为一个关系模式。实体的属性就是关系的属性。实体的码就是关系的码。
例如,学生实体可以转换为如下关系模式,其中,学号为学生关系的码:
学生(学号,姓名,出生日期,所在系,年级,平均成绩)。同样,性别、宿舍、班级、档案材料、教师、课程、教室、教科书都分别转换为一个关系模式。
2)一个联系转化为一个关系模式,与该联系相连的各实体的码以及联系的属性转化为关系的属性。该关系的码有如下3种情况:
①若联系为1:1,则每个实体的码均是该关系的候选码。
②若联系为1:n,则关系的码为n端实体的码。
③若联系为m:n,则关系的码为诸实体码的组合。
下面分别来讲解这3种情况。
①联系为1:1
一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。
a)如果转换为一个独立的关系模式,那么与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,每个实体的码均是该关系的候选码。
b)如果与某一端对应的关系模式合并,那么需要在该关系模式的属性中加入另一个关系模式的码和联系本身的属性。
②联系为1:n
一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并。
a)如果转换为一个独立的关系模式,那么与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为n端实体的码。
b)如果与n端对应的关系模式合并,那么在n端实体对应模式中加入1端实体所对应关系模式的码,以及联系本身的属性。而关系的码为n端实体的码。
③联系为m:n
一个m:n联系转换为一个关系模式。与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为各实体码的组合。
3)同一实体集的实体间的联系,即自联系,也可按上述1:1、1:n和m:n三种情况分别处理。
例如,如果教师实体集内部存在领导与被领导的1:n自联系,那么可以将该联系与教师实体合并,这时主键职工号将多次出现,但作用不同,可用不同的属性名加以区分。例如,在合并后的关系模式中,主键仍为职工号,再增设一个“系主任”属性,存放相应系主任的职工号。
4)具有相同码的关系模式可合并。
为了减少系统中的关系个数,如果两个关系模式具有相同的主键,那么可以考虑将它们合并为一个关系模式。合并方法是将其中一个关系模式的全部属性加入另一个关系模式中,然后去掉其中的同义属性(可能同名也可能不同名),并适当调整属性的次序。[考点]E-R模型
10.
在Oracle中,什么是异常?正确答案:异常(Exception)处理是用来处理正常执行过程中未预料到的事件,包括程序块的异常处理、预定义的错误和自定义错误。如果PL/SQL程序块一旦产生异常,而程序并没有指出如何处理,那么程序就会自动终止运行。
异常处理部分一般放在PL/SQL程序体的后半部分,结构如下。
EXCEPTION
WHENfirst_exception
THEN
<codetohandlefirstexertion>
WHENsecond_exception
THEN
<codetohandlesecondexception>
WHENOTHERSTHEN<codetohandleOTHERSexception>[考点]程序处理
11.
RESETLOGS和NORESETLOGS的区别是什么?正确答案:RESETLOGS和NORESETLOGS主要用在两个地方,第一是在创建控制文件的时候,第二是在打开数据库的时候。当将控制文件备份到TRACE文件时,可以看到里面包含了两部分的重建语句,一个是使用RESETLOGS,另一个是使用NORESETLOGS。
备份控制文件的SQL如下:
SQL>alterdatabasebackupcontrolfiletotraceas'/home/oracle/cct_etl_lhr.sql';
若当前的所有在线日志可用时,则在创建控制文件的时候使用NORESETLOGS。若当前的在线日志有所损坏时,则在创建控制文件的时候需要使用RESETLOGS。若使用RESETLOGS则将导致在线日志里的内容丢失,并且所有的备份失效。
在打开数据库的时候也可以使用RESETLOGS或NORESETLOGS选项。在做了不完全恢复后,RESETLOGS会初始化日志,重置日志序列号(从1开始),并且创建一个新的INCARNATION。可以使用RMAN命令查看INCARNATION的信息:
RMAN>LISTINCARNATION;
做不完全恢复必须使用RESETLOGS,但是RESETLOGS也可以做完全恢复。而NORESETLOGS则必须是在做完全恢复时使用。RESETLOGS会重置日志序列号,强制清空或重建在线日志,而NORESETLOGS则不会这么做。[考点]RMAN
12.
如何查找逻辑读、物理读、执行次数和解析次数最多以及执行时间最长的SQL语句?如何查找或监控效率低下的SQL语句?正确答案:效率低下的SQL一股是执行时间较长的SQL语句,可以通过如下几种方式来监控分析:
1)当前系统的SQL可以通过监控V$SQL_MONITOR、V$SESSION视图来实现,记录执行时间较长的SQL语句。对于历史SQL可以通过分析DBA_HIST_SQLSTAT视图。
2)分析现有的系统中的执行计划,重点检查驱动表与被驱动表顺序、表连接算法、排序是否有索引、索引使用。
3)分析AWR、ASH和ADDM。
4)通过OEM中性能监控捕获5s以上的SQL。
5)通过GV$SQLAREA视图来分析。[考点]性能诊断
13.
如何计算一个字符在字符串中出现的次数?正确答案:可以利用REGEXP_COUNT、REGEXP_REPLACE或TRANSLATE系统函数,也可以自定义函数来计算一个字符在字符串中出现的次数。[考点]函数相关
14.
如何快速地清理Oracle的进程?正确答案:若想要快速清理掉Oracle的进程,最直接的办法是杀pmon进程。有如下3条命令可供选择,其中加粗的orcl替换成ORACLE_SID的值即可。
kill-9'ps-ef|greporcl|grep-vgrep|awk'{print$2}''
ps-ef|greporcl|grep-vgrep|awk'{print$2}'|xargskill-9
ipcs-m|greporacle|awk'{print$2}'|xargsipcrmshm
若想要快速杀掉集群的进程,则可以执行如下命令:
km-9'ps-ef|grepd.bin|grep-vgrep|awk'{print$2}''
注意,生产库上严禁使用,否则可能导致集群不能正常启动。[考点]会话
15.
MySQL有几种存储引擎(表类型)?各自有什么区别?正确答案:MySQL官方有多种存储引擎:MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE。第三方存储引擎中比较有名的有TokuDB、Infobright、InnfiniDB、XtraDB(InnoDB增强版本)。其中,最常见的两种存储引擎是MyISAM和InnoDB。MyISAM是MySQL关系型数据库管理系统的默认存储引擎(MySQL5.5以前)。这种MySQL表存储结构从旧ISAM代码扩展出许多有用的功能。从MySQL5.5开始,InnoDB引擎由于其对事务参照完整性,以及更高的并发性等优点开始逐步地取代MyISAM,作为MySQL数据库的默认存储引擎。下面逐一介绍各种存储引擎。
1.MyISAM
MyISAM存储引擎管理非事务表,提供高速存储和检索,以及全文搜索能力。该引擎插入数据快,空间和内存使用比较低。
(1)存储组成
每个MyISAM在磁盘上存储成三个文件。每一个文件的名字就是表的名字,文件名都和表名相同,扩展名指出了文件类型。这里特别要注意的是,MyISAM不缓存数据文件,只缓存索引文件。
1)表定义的扩展名为.frm(frame,存储表定义)。
2)数据文件的扩展名为.MYD(MYData,存储数据)。
3)索引文件的扩展名是.MYI(MYIndex,存储索引)。
数据文件和索引文件可以放置在不同的目录,平均分布I/O,获得更快的速度,而且其索引是压缩的,能加载更多索引,这样内存使用率就对应提高了不少,压缩后的索引也能节约一些磁盘空间。
(2)特点
1)不支持事务,不支持外键约束,但支持全文索引,这可以极大地优化LIKE查询的效率。
2)表级锁定(更新时锁定整个表):其锁定机制是表级索引,这虽然可以让锁定的实现成本很小,但是也同时大大降低了其并发性能。MyISAM不支持行级锁,只支持并发插入的表锁,主要用于高负载的查询。
3)读写互相阻塞:不仅会在写入的时候阻塞读取,MyISAM还会在读取的时候阻塞写入,但读本身并不会阻塞另外的读。
4)不缓存数据,只缓存索引:MyISAM可以通过key_buffer缓存,以大大提高访问性能,减少磁盘I/O,但是这个缓存区只会缓存索引,而不会缓存数据。
[root@mysql]#grepkey_bufferf
key_buffer_size=16M
5)读取速度较快,占用资源相对少。
6)MyISAM引擎是MySQL5.5之前版本缺省的存储引擎。
7)并发量较小,不适合大量UPDATE。
(3)适用场景
如果表主要用于插入新记录和读出新记录,那么选择MyISAM存储引擎能实现处理的高效率。如果应用的完整性和并发性要求很低,那么也可以选择MyISAM存储引擎。它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。具体来说,适用于以下场景:
1)不需要事务支持的业务,一般为读数据比较多的网站应用。
2)并发相对较低的业务(纯读纯写高并发也可以)。
3)数据修改相对较少的业务。
4)以读为主的业务,例如,WWW、BLOG、图片信息数据库、用户数据库、商品数据库等业务。
5)对数据一致性要求不是非常高的业务。
6)中小型网站的部分业务。
小结:单一对数据库的操作都可以使用MyISAM,所谓单一就是尽量纯读,或纯写(INSERT,UPDATE,DELETE)等。生产建议:没有特别需求,一律用InnoDB。
(4)MyISAM引擎调优精要
1)尽量索引(缓存机制)。
2)调整读写优先级,根据实际需要确保重要操作更优先。
3)启用延迟插入改善大批量写入性能(降低写入频率,尽可能多条数据一次性写入)。
4)尽量顺序操作让INSERT数据都写入尾部,减少阻塞。
5)分解大的操作,降低单个操作的阻塞时间。
6)降低并发数,某些高并发场景通过应用进行排队机制。
7)对于相对静态的数据,充分利用QueryCache可以极大地提高访问效率。
[root@mysql3307]#grepqueryf
query_cache_size=2M
query_cache_limit=1M
query_cache_min_res_unit=2k
这几个参数都是MySQL自身缓存设置。
8)MyISAM的COUNT只有在全表扫描的时候特别高效,带有其他条件的COUNT都需要进行实际的数据访问。
9)把主从同步的主库使用InnoDB,从库使用MyISAM引擎。
2.InnoDB
InnoDB用于事务处理应用程序,主要面向OLTP方面的应用。该引擎由InnoDB公司开发,其特点是行锁设置,并支持类似于Oracle的非锁定读,即默认情况下读不产生锁。InnoDB将数据放在一个逻辑表空间中。InnoDB通过多版本并发控制来获得高并发性,实现了ANSI标准的4种隔离级别,默认为Repeatable,使用一种被称为next-keylocking的策略避免幻读。对于表中数据的存储,InnoDB采用类似Oracle索引组织表Clustered的方式进行存储。如果对事务的完整性要求比较高,要求实现并发控制,那么选择InnoDB引擎有很大的优势。需要频繁地进行更新,删除操作的数据库,也可以选择InnoDB存储引擎。因为InnoDB存储引擎提供了具有提交(COMMIT)、回滚(ROLLBACK)和崩溃恢复能力的事务安全。
InnoDB类型的表只有ibd文件,分为数据区和索引区,有较好的读写并发能力。物理文件有日志文件、数据文件和索引文件。其中,索引文件和数据文件是放在一个目录下,可以设置共享文件、独享文件两种格式。
(1)特点
1)支持事务:包括ACID事务支持,支持4个事务隔离级别,支持多版本读。
2)行级锁定(更新时一般是锁定当前行):通过索引实现,全表扫描仍然会是表锁,注意间隙锁的影响。
3)支持崩溃修复能力和MVCC。
4)读写阻塞与事务隔离级别相关。
5)具有非常高效的缓存特性:能缓存索引,也能缓存数据。
6)整个表和主键以CLUSTER方式存储,组成一棵平衡树。
7)所有SECONDARYINDEX都会保存主键信息。
8)支持分区、表空间,类似Oracle数据库。
9)支持外键约束(ForeignKey),外键所在的表称为子表,而所依赖的表称为父表。
10)InnoDB支持自增长列(AUTO_INCREMENT),自增长列的值不能为空。
11)InnoDB是索引和数据紧密捆绑的,没有使用压缩,从而会造成InnoDB比MyISAM体积庞大得多。
(2)优点
支持事务,用于事务处理应用程序,具有众多特性,包括ACID事务支持,支持外键,同时支持崩溃修复能力和并发控制。并发量较大,适合大量UPDATE。
(3)缺点
对比MyISAM的存储引擎,InnoDB写的处理效率差一些,并且会占用更多的磁盘空间以保留数据和索引。相比MyISAM引擎,InnoDB引擎更消耗资源,速度没有MyISAM引擎快。
(4)适用场景
如果对事务的完整性要求比较高,要求实现并发控制,那么选择InnoDB引擎有很大的优势。需要频繁地进行更新,删除操作的数据库,也可以选择InnoDB存储引擎。具体分类如下:
1)需要事务支持(具有较好的事务特性)。
2)行级锁定对高并发有很好的适应能力,但需要确保查询是通过索引完成。
3)数据更新较为频繁的场景,例如,BBS(BulletinBoardSystem,电子公告牌系统)、SNS(SocialNetworkSite,社交网)等。
4)数据一致性要求较高的业务。例如,充值、银行转账等。
5)硬件设备内存较大,可以利用InnoDB较好的缓存能力来提高内存利用率,尽可能减少磁盘I/O。
物理数据文件:
[root@mysql3307]#11data/ibdatal
-rw-rw----1mysqlmysql134217728May1508:31data/ibdata1
6)相比MyISAM引擎,InnoDB引擎更消耗资源,速度没有MyISAM引擎快。
(5)InnoDB引擎调优精要
1)主键尽可能小,避免给SECONDARYINDEX带来过大的空间负担。
2)避免全表扫描,因为会使用表锁。
3)尽可能缓存所有的索引和数据,提高响应速度,减少磁盘I/O消耗。
4)在执行大量插入操作的时候,尽量自己控制事务而不要使用AUTOCOMMIT自动提交。有开关可以控制提交方式。
5)合理设置innodb_flush_log_at_trx_commit参数值,不要过度追求安全性。
6)避免主键更新,因为这会带来大量的数据移动。
3.MEMORY(HEAP)
MEMORY存储引擎(之前称为HEAP)提供“内存中”的表。如果需要很快的读写速度,对数据的安全性要求较低,那么可选择MEMORY存储引擎。MEMORY存储引擎对表大小有要求,不能建太大的表。所以,这类数据库只适用相对较小的数据库表。如果mysqld进程发生异常,那么数据库就会重启或崩溃,数据就会丢失,因此,MEMORY存储引擎中的表的生命周期很短,一般只使用一次,非常适合存储临时数据。
(1)特点
1)MEMORY存储引擎将所有数据保存在内存(RAM)中,在需要快速查找引用和其他类似数据的环境下,可提供极快的访问速度。
2)每个基于MEMORY存储引擎的表实际对应一个磁盘文件,该文件的文件名和表名是相同的,类型为.frm。该文件只存储表的结构,而其数据文件都是存储在内存中,这样有利于对数据的快速处理,提高整个表的处理能力。
3)MEMORY存储引擎默认使用哈希(HASH)索引,其速度比使用B-Tree型要快,但安全性不高。如果希望使用B-Tree型,那么在创建的时候可以引用。
(2)适用场景
如果需要很快的读写速度,那么在需要快速查找引用和其他类似数据的环境下,对数据的安全性要求较低,可选择MEMORY存储引擎。
(3)优点
将所有数据保存在内存(RAM)中,默认使用HASH索引,数据的处理速度快。
(4)缺点
不支持事务,安全性不高;MEMORY存储引擎对表大小有要求,不能建太大的表。
4.MERGE
MERGE存储引擎允许将一组使用MyISAM存储引擎的并且表结构相同(即每张表的字段顺序、字段名称、字段类型、索引定义的顺序及其定义的方式必须相同)的数据表合并为一个表,方便了数据的查询。需要注意的是,使用MERGE“合并”起来的表结构相同的表最好不要有主键,否则会出现这种情况:一共有两个成员表,其主键在两个表中存在相同情况,但是写了一条按相同主键值查询的SQL语句,这时只能查到UNION列表中第一个表中的数据。MERGE存储引擎允许集合将被处理同样的MyISAM表作为一个单独的表。
适用场景:MERGE存储引擎允许MySQLDBA或开发人员将一系列等同的MyISAM表以逻辑方式组合在一起,并作为1个对象引用它们。对于诸如数据仓库等,VLDB(VeryLargeDataBase,超大型数据库)环境十分适合。
优点:便于同时引用多个数据表而无须发出多条查询。
缺点:不支持事务。
5.BDB(BerkeleyDB)
BDB是事务型存储引擎,支持COMMIT、ROLLBACK和其他事务特性,它由××软件公司(http://www.***.com)开发。BDB是一个高性能的嵌入式数据库编程库(引擎),它可以用来保存任意类型的键/值对(Key/ValuePair),而且可以为一个键保存多个数据。BDB可以支持数干的并发线程同时操作数据库,支持最大256TB的数据。BDB存储引擎处理事务安全的表,并以哈希为基础的存储系统。
适用场景:BDB存储引擎适合快速地读写某些数据,特别是不同KEY的数据。
优点:支持事务。
缺点:在没有索引的列上操作速度很慢。
6.EXAMPLE
EXAMPLE存储引擎是一个“存根”引擎,可以用这个引擎创建表,但数据不能存储在该引擎中。EXAMPLE存储引擎可为快速创建定制的插件式存储引擎提供帮助。
7.NDB
NDB存储引擎是一个集群存储引擎,是被MySQLCluster用来实现分割到多台计算机上的表的存储引擎,类似于Oracle的RAC,但它是ShareNothing的架构,因此,能提供更高级别的高可用性和可扩展性。NDB的特点是数据全部放在内存中,因此,通过主键查找非常快。它在MySQL-Max5.1二进制分发版里提供。
(1)特性
1)分布式:分布式存储引擎,可以由多个NDBCluster存储引擎组成集群分别存放整体数据的一部分。
2)支持事务:和InnoDB一样,支持事务。
3)可与mysqld不在一台主机:可以和mysqld分开存在于独立的主机上,然后通过网络和mysqld通信交互。
4)内存需求量巨大:新版本索引以及被索引的数据必须存放在内存中,老版本所有数据和索引必须存在于内存中。
(2)适用场景
1)具有非常高的并发需求。
2)对单个请求的响应并不是非常严格。
3)查询简单,过滤条件较为固定,每次请求数据量较少。
4)具有高性能查找要求的应用程序,这类查找需求还要求具有最高的正常工作时间和可用性。
(3)优点
1)分布式:分布式存储引擎,可以由多个NDBCluster存储引擎组成集群分别存放整体数据的一部分。
2)支持事务:和InnoDB一样,支持事务。
3)可与mysqld不在一台主机:可以和mysqld分开存在于独立的主机上,然后通过网络和mysqld通信交互。
(4)缺点
内存需求量巨大:新版本索引以及被索引的数据必须存放在内存中,老版本所有数据和索引必须存在于内存中。它的连接操作是在MySQL数据库层完成,不是在存储引擎层完成的,这意味着,复杂的连接操作需要巨大的网络开销,查询速度会很慢。
8.ARCHIVE
ARCHIVE存储引擎只支持INSERT和SELECT操作,其设计的主要目的是提供高速的插入和压缩功能。
适用场景:ARCHIVE非常适合存储归档数据,如日志信息。
优点:ARCHIVE存储引擎被用来无索引地、非常小地覆盖存储的大量数据。为大量很少引用的历史、归档或安全审计信息的存储和检索提供了完美的解决方案。
缺点:不支持事务,只支持INSERT和SELECT操作。
9.CSV
CSV存储引擎把数据以逗号分隔的格式存储在文本文件中。
10.BLACKHOLE
BLACKHOLE存储引擎接收但不存储数据,并且检索总是返回一个空集。用于临时禁止对数据库的应用程序输入。该存储引擎支持事务,而且支持MVCC的行级锁,主要用于日志记录或同步归档。
11.FEDERATED
FEDERATED存储引擎不存放数据,它至少指向一台远程MySQL数据库服务器上的表,该存储引擎把数据存在远程数据库中,非常类似于Oracle的透明网关。在MySQL5.1中,它只和MySQL一起工作,使用MySQLCClientAPI。在未来的分发版中,想要让它使用其他驱动器或客户端连接方法连接到另外的数据源。该存储引擎能够将多个分离的MySQL服务器连接起来,从多个物理服务器创建一个逻辑数据库,十分适合于分布式环境或数据集市环境。
12.ISAM
最原始的存储引擎就是ISAM,它管理着非事务性表,后来被MyISAM代替了,而且MyISAM是向后兼容的,因此可以忘记这个ISAM存储引擎。
可以在MySQL中使用显示引擎的命令得到一个可用引擎的列表,如下:
上面查询结果显示了可用的数据库引擎的全部名单以及在当前的数据库服务器中是否支持这些引擎。
下面的表格列出了一些常见的比较重要的存储引擎。
16.
SCN与时间戳如何相互转换?正确答案:一个SCN值总是发生在某一个特定的时刻,只不过由于粒度的不一样,通常会存在多个SCN对应同一个时间戳的情况。Oracle10g提供了两个新函数用于SCN和时间戳进行相互转换,这两个函数分别是SCN_TO_TIMESTAMP和TIMESTAMP_TO_SCN,通过对SCN和时间戳进行转换,极大方便了Oracle的很多备份和恢复过程。
1)SCN_TO_TIMESTAMP(scn_number):将SCN转换成时间戳。
2)TIMESTAMP_TO_SCN(timestamp):将时间戳转换成SCN。
通过以上这两个函数,最终Oracle将SCN和时间的关系建立起来。在Oracle10g之前,是没有办法通过函数转换得到SCN和时间的对应关系的,一般可以通过LogMiner分析日志获得。但是这两种函数转换要依赖于数据库内部表SMON_SCN_TIME,对于久远的SCN则不能转换。[考点]RMAN
17.
文件b.txt,每行以“:”符分成5列,如“1:app
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026福建漳州漳浦龙成中学招聘考试备考题库及答案解析
- 2026广东广州市花都区教育局赴武汉招聘公办学校事业编制教师50人(编制)考试备考题库及答案解析
- 2026年双鸭山宝清县招聘公益性岗位110人笔试备考题库及答案解析
- 2026杭州钢铁集团有限公司校园招聘101人人笔试模拟试题及答案解析
- 土地平整与基础施工方案
- 风电建设现场环境监测方案
- 2026广东岭南国防教育基地仓库管理员招聘考试备考题库及答案解析
- 施工资料归档管理方案
- 土方开挖现场管理与协调方案
- 化学工程就业方向
- 建筑防水工程技术规程DBJ-T 15-19-2020
- 《创新创业基础》课件-模块四 创新成果保护与转化
- 燃料检修潜在风险与预控措施
- 中学生防震减灾知识
- 劳务合同模板电子下载
- 新安全生产法全文-安全生产法全文
- 初中体育-篮球绕杆运球教学课件设计
- 《物理(下册)》教学课件-第六章-光现象及其应用
- 麦积山石窟课件
- 分数百分数应用题的复习课件
- 开复工安全检查表
评论
0/150
提交评论