存档
ASE15中的数据分区介绍
数据分区技术可以将大的表或者索引分割成小的“数据片”,并存放在不同的“存储单元”中。数据库管理员可以在底层进行数据的存储、维护和管理工作。“segment(段)”在ASE中被定义为设备的单元。它常常被用来存储特定类型数据,例如:系统数据、日志数据和用户数据。分区可以存贮在不同的段上或者不同的分区存储在同一个段上。类似的,一个或多个段可以存放在任何的逻辑设备或物理设备上,这样可以通过分离I/O来提高性能和数据的可用性。在一个分区上的表或索引的数据可以以不同于其他分区的方式来管理和操作。查询时只须访问那些包含所需数据的分区。
数据库管理员可以更快捷地管理和维护这些较小的分区,而不是像以前那样不得不面对巨型的表和索引。一些日常的任务甚至可以在多个分区上并行地执行,这不但可以节省时间,还可以在分区上自动运行。当数据增长时,只需添加新的分区即可。
在ASE15中提供了四种方式的数据分区。第一种方式称之为轮询(round-robin)分区,是在ASE15之前版本中唯一提供的分区方式。这种方式是在分区上顺序排列数据,没有办法决定数据在分区上的存储位置,并且查询操作会涉及所有的分区。其他的三种分区方式统称为“语义数据分区”,因为可以通过这些方式确定数据的分区存放位置。在ASE15中将被广泛使用的方式是范围分区(Range Partitioning)方式。利用这种分区方式,数据库管理员可以通过数据的范围确定数据在分区上的存储位置。下一种方式是列表分区(List Partitioning)方式,可以将不同的数据分割存放在不同的分区上。第三种语义分区方式是哈希分区(Hash Partitioning)方式,在这种方式下数据是根据特定的列和内部哈希运算法则来确定数据的存放方式的。
如何使用数据分区
Sybase ASE中的分区功能只能在V15.0以及后续的版本中使用,ASE V15.0之前的版本中无法使用数据分区功能。在ASE V15.0之前版本中对于大表一般根据业务系统特点“分割表”来提高查询性能。
Sybase ASE自V12.5.0.3引入了MDA表来监控Sybase数据库的性能,ASE15以来MDA的监控能力越来越强。本博客中有关于如何配置MDA表的文章:
MDA中的代理表monProcessSQLText包含当前所有会话正在执行的SQL语句。如果已经配置了MDA,可以通过查询该代理表monProcessSQLText来获得正在执行的SQL语句。
在没有配置MDA监控的环境中,可以使用更加通用的命令来查询当前会话正在执行的SQL语句。dbcc sqltext命令需要sybase_ts_role角色才能执行,过程sp_showplan需要sa_role角色才能执行。
下面提供一个存储过程来查询当前Sybase服务器内正在执行的所有SQL语句。思路是:获得当前使用锁的会话ID(spid),利用游标遍历得到每个spid的正在执行的SQL语句。
在CentOS5.5 x86_64上安装了Oracle11g,版本号为:11.2.0.1.0
但是,在其它客户端上使用sqlplus连接的时候需要等待很长时间才能连接上,有时候报超时的错误。
错误信息为:
*********************************************************************** Fatal NI connect error 12537, connecting to: (LOCAL=NO) VERSION INFORMATION: TNS for Linux: Version 11.2.0.1.0 - Production Oracle Bequeath NT Protocol Adapter for Linux: Version 11.2.0.1.0 - Production TCP/IP NT Protocol Adapter for Linux: Version 11.2.0.1.0 - Production Time: 30-NOV-2011 14:28:10 Tracing not turned on. Tns error struct: ns main err code: 12537 TNS-12537: TNS:connection closed ns secondary err code: 12560 nt main err code: 0 nt secondary err code: 0 nt OS err code: 0 opiodr aborting process unknown ospid (29666) as a result of ORA-609 Wed Nov 30 14:36:24 2011
Oracle11g服务器数据库名为:lzf,全局名称为:lzf.dbainfo.net
Linux下使用date计算某个月份的天数:
Month=2 Year=2008 nextmonth=`date -d "1 month $Year-$Month-"01"" +%Y-%m-%d` date -d "-1 day $nextmonth" +%d #或者将-d "1 month $Year-$Month-"01"" 和 date -d "-1 day $nextmonth" 写在一行命令中 Month=2 Year=2008 date -d "1 month $Year-$Month-"01"" -d "-1 day" +%d
使用cal 计算某个月份的天数: