时间: 2021-08-13 作者:daque
db2 基础观念 在db第22中学由上至下的几个观念: 范例(instance), 数据库(database), 表空间(tablespace), 容器(container) 在一个操纵体例中,db2数据效劳不妨同声运转多个范例(有别于oracle在一个体例内只能起一个范例). 数据库设置在范例中,一个范例不妨包括多个数据库。在同一个范例中的各别数据库是实足独力的,辨别具有本人独力的体例编目表。 表空间有2种处置办法: dms(database management space)办法 sms(system manegement space)办法 dms与sms办法在表空间建登时指定,建好后不许变换。对于dms办法,一个表空间对应了一个或多个容器(container),容器指定了数据的物理保存场所。对于sms办法,只不妨指定一个目次,不不妨减少。 表空间具备以次典型: 体例编目表空间(syscatspace) 体例偶尔表空间(systempspace) 用户表空间(userspace) 用户偶尔表空间(usertempspace) 一个数据库中必需生存两个体例基础的表空间,辨别是体例编目表空间与体例偶尔表空间。在数据库中创造的任何东西都以在体例编目表空间中减少记载的办法展现,对于偶尔表空间,其占用磁盘巨细是按照运用情景动静舒卷的,即仅在须要时才调配磁盘空间,并在运用保守行接收。其余,若用户须要创造表,则须要创造用户表空间,若须要运用偶尔表,则须要创造用户偶尔表空间。 容器分为三种典型: files 文献 devices 摆设 directory 目次 文献与摆设,用来dms办法的表空间; 目次,用来sms办法的表空间,此种办法不须要人为处置数据保存文献,db2可按照情景在目次中机动减少保存文献,只有磁盘空间承诺。 本质上,表空间是数据保存的论理场所设置,容器则是数据保存的物理场所设置。 数据库的本能 感化一个数据库的本能重要有以次成分: 磁盘(disk) 外存(memory) 处置器(cpu) 搜集(network) 个中以磁盘最为明显,90%的本能瓶颈大概来自于磁盘的io比赛; 其次是外存,一上面是指物理外存的总量要满意需要,另一上面是指与外存关系的摆设参数应精确摆设; 固然处置器的本能也很要害,多路cpu会对哪些依附计划本领的搀杂sql查问起到明显的功效; 搜集不属于重要成分,属于客观的情况成分,是指过慢的网速会对数据的传输形成感化。以次列出少许对于普及数据库本能灵验的本领: 对于运转数据库效劳的效劳器不妨尽大概的摆设多块物理磁盘,每块的含量不用太大,如许不妨灵验的分管数据保存与读取操纵进程的磁盘io比赛。即沿用多块小含量的磁盘在本能上要优于仅沿用一块大含量的磁盘。 即使前提承诺,尽管使数据保存效劳与操纵体例辨别运转在物理划分的磁盘上。 沿用dms(database management space)处置办法的表空间。 在物理各别的磁盘上创造多个表空间。而后不妨将数据和索引辨别寄存在各别的表空间,如许不妨明显的普及本能。还不妨把一个运用一再的大表纵向拆成多个小表,辨别寄存在各别的表空间中,而后用一个视图举行共同。 db2效劳器不妨处置裸摆设,即除体例以及db2效劳运转磁盘除外,为db2数据寄存独立筹备磁盘,不妨是多块,分区后不须要方法化,创造裸摆设后径直交给db2举行处置,用来保存数据。 体例的偶尔表空间对数据库本能感化很大,当由处置的物理外存不许满意数据库操纵的须要时,db2便会把偶尔数据写到磁盘上,这时候便用到了体例偶尔表空间,而且这种情景会常常爆发。 尽管在磁盘邻近最内层磁道的场所安置数据,由于此处磁盘的考察速率较快。 与本能关系的重要参数 db2的参数摆设分为两个级别,一个是范例级别,另一个是数据库级别。对数据效劳本能感化较大的参数重要在数据库级别摆设。以次是三个比拟要害的外存摆设参数: bufferpagelocklistsortheap bufferpage: 由同一个数据库中的一切东西共享。 sortheap: 用来排序的外存调换区,非共享,不宜树立太大,要不,很简单惹起外存耗尽,由于每一个工作城市请求独力的外存用来排序。[page_break] locklist: 共享外存,用来记载数据效劳运转中创造的锁。倡导树立20mb安排,须要时按照本质情景举行安排。db2默许运用行级锁,即使树立太小,当锁的记载太多时,则会引导外存不及,此时db2会把多个行锁晋级为一个表锁,如许就会大大贬低运用步调的并发本能。即使树立太大,则多调配的外存很少会被用到,引导滥用。 其余的少许摆设参数: numdb: 同声不妨启用的范例数量 db2的常用吩咐 db2ilist 列出暂时体例中设置的db2范例daslist 列出体例中的dasdb2 list database directory 列出暂时范例中设置的数据库db2 list tablespaces 列出暂时数据库中设置的表空间db2 list tabses [for all] 列出暂时数据库中的表db2 list active db 列出震动的数据库 db2 get dbm configget db cfg for databasenamedb2 update db cfg for databasename using bufferpage 600mdb2 alter bufferpool iabmdefaultbp size =1db2 list applications show detail 之上吩咐不妨在反面加 " show detail" 参数,表露精细消息。 db2数据保存的页巨细只能在表空间级别一致指定(辨别于oracle,不妨设置在表级别), 而且建好后不许窜改。 不妨细工创造一个页巨细为4k的dms用户偶尔表空间,而后把体例默许的sms体例偶尔表空间简略。为满意运用需要,普遍还应再创造一个页巨细在8k之上的用户偶尔表空间。 db2 udb v8.1 对redhat linux 9 的扶助不好,默许情景下没辙启用gui安置步调(不妨经过树立情况ld_assume_kernel=2.2.5处置),而且不会安置sample数据库,遏制重心也没辙平常启用。 db2 sql 关系 当运用count()因变量时,即使表中的记载数 > 2 147 483 647行,则因变量大概归来缺点的截止,这时候不妨运用归来典型为decimal(31, 0)的count_big()因变量。 distinct 要害字不妨用在count()因变量中,如: select count(distinct id) from table 这代办将不对id列的反复值举行计数。 order by子句反面即使写了多个列名,须要辨别指定叶序或是降序。 不妨在load洪量数据时,姑且封闭表的日记选项。运用: alter table ... activate not logged initially db2的几个特出存放器: current datecurrent timecurrent timestampuser(用户id) 相关日子的操纵: current timestamp + 2 days(or hours, seconds, months, years, etc.) case 语句的运用: case when 前提一 then 举措一 else 举措二 end; 之上不妨欠套运用。 在视图的创造语句中没辙运用order by 子句与 fetch n rows 子句。但对于order by不妨用如次本领代替实行,然而会感化功效。 create view v_name1(c1, c2, c3) asselect * from (select column1, column2, column3from t1order by column1 ) as t1;