Sybase 表分区

Posted jackson.gong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sybase 表分区相关的知识,希望对你有一定的参考价值。

------------不能分区的表:系统表、正在使用的表、临时表、和有聚簇索引的表
----检查sybase版本
select @@version


--查看分区情况(sp_helpartition 默认default,system,logsegment)
---可以查看 分区类型(partition_type),分区个数(partitions),分区的字段(partition_keys), 每个分区有多少数据(row_count),
---创建时间(create_date),所在段(segment),以及分区的划分名(partition_name),每个分区的划分条件(Partition_Conditions)


sp_helpartition  [tablename];

 

 

---查看分区值信息,比如查看范围分区表的分区粒度、列表分区的各个列表值

select c.number,c.text,c.partitionid,p.name
from sysindexes i, syscomments c,syspartitions p
where i.conditionid = c.id and c.partitionid = p.partitionid
and i.id =object_id(‘tablename‘)

---查看段
sp_helpsegment

--通过 段查看磁盘设置

sp_helpsegment system

sp_helpsegment  [‘segment‘]

 

---日志空间检查
--正常状态:free_pages 占total_pages总数的50%以上
--非正常状态和采取措施:
sp_helpsegment logsegment
--或者 sa权限下
dbcc checktable(syslogs)
-----dbcc checktbale 命令只能针对日志段拥有独立数据设备的情况,如果数据段和日志混合使用数据设备的只能
-----使用sp_helpsegment logsegment命令,建议使用dbcc checktbale 结果比较直观



----去掉段(段要存在) 端名 数据库名 设备名(如果该段只在一个分区上存在,则不需要设备名:不要第三个参数)
sp_dropsegment   ‘segment‘, dbname  ,[drivename]

----添加段
sp_addsegment  ‘segment‘, dbname  ,[drivename]

---将表放置在段上
sp_placeobject ‘segment‘ , tablename

----查看设备
sp_helpdevice


----可看到数据库空间包括日志(对应数据库)
sp_spaceused

 

 ---可看到数据库占用的数据库设备device的空间信息

sp_helpdb javadb

----数据和日志分离 创建设备:
USE master
DISK INIT name = ‘FX_DATA_2019‘, physname = ‘/sybase/CJQ/FXDATA/FX_DATA_2019.dat‘ , size = ‘10000M‘,dsync = ‘false‘
DISK INIT name = ‘FX_LOG_2019‘, physname = ‘/sybase/CJQ/FXLOG/FX_LOG_2019.dat‘ , size = ‘1000M‘,dsync = ‘false‘

 

 

ALTER DATABASE javadb ON FX_DATA_2019 = ‘1G‘ LOG ON FX_LOG_2019 = ‘1G‘
----如何查看一个语义分区表的分区键
select c.name
from syspartitionkeys pk,syscolumns c
where pk.id = object_id(‘T_POS_RETAIL_ORDER_HIS‘)
and pk.id = c.id
and pk.colid = c.colid

------如何判断一个表是否是分区表 0 就是没有分区
select count(*) from dbo.syspartitionkeys where id=object_id(‘T_POS_RETAIL_ORDER_ITEM_HIS‘)
select * from T_POS_RETAIL_ORDER_HIS partition (3580120);

---估计分区数所占用的内存或一定内存所能配置的分区数
sp_helpconfig ‘number of open partitions‘,‘1000‘

--检查表分区参数
sp_configure ‘enable semantic partitioning‘

--SA权限帐户设置表分区参数为可用
sp_configure ‘enable semantic partitioning‘, 1


-----使用 sapsa 开启 表分区 并且 初始化为800
sp_configure ‘number of open partitions‘,800


-----使用 sapsa 开启 查询最多能使用的分区大小 初始化的时候可以增加10%
sp_monitorconfig ‘open partitions‘

--- 如要取消分区,必须先将分区修改为 roundrobin,且在一个段上(取消分区必须要先删除索引)。
alter table T_POS_RETAIL_ORDER_ITEM_HIS partition by roundrobin (part1)

-------修改表 分区 T_POS_RETAIL_ORDER_HIS_201612 如果不写默认名为 表名+id
alter TABLE
T_POS_RETAIL_ORDER_HIS
partition by Range (ORDER_DATE)(
T_POS_RETAIL_ORDER_HIS_201612 VALUES <= (‘2016-12-31‘) on FX_DATA_2016,
T_POS_RETAIL_ORDER_HIS_201701 VALUES <= (‘2017-01-31‘) on FX_DATA_2017,
T_POS_RETAIL_ORDER_HIS_201702 VALUES <= (‘2017-02-28‘) on FX_DATA_2017,
T_POS_RETAIL_ORDER_HIS_201703 VALUES <= (‘2017-03-31‘)on FX_DATA_2017,
T_POS_RETAIL_ORDER_HIS_201704 VALUES <= (‘2017-04-30‘)on FX_DATA_2017,
T_POS_RETAIL_ORDER_HIS_201705 VALUES <= (‘2017-05-31‘)on FX_DATA_2017,
T_POS_RETAIL_ORDER_HIS_201706 VALUES <= (‘2017-06-30‘)on FX_DATA_2017,
T_POS_RETAIL_ORDER_HIS_201707 VALUES <= (‘2017-07-31‘)on FX_DATA_2017,
T_POS_RETAIL_ORDER_HIS_201708 VALUES <= (‘2017-08-31‘)on FX_DATA_2018,
T_POS_RETAIL_ORDER_HIS_201709 VALUES <= (‘2017-09-30‘)on FX_DATA_2017,
T_POS_RETAIL_ORDER_HIS_201710 VALUES <= (‘2017-10-31‘) on FX_DATA_2017,
T_POS_RETAIL_ORDER_HIS_201711 VALUES <= (‘2017-11-30‘) on FX_DATA_2017,
T_POS_RETAIL_ORDER_HIS_201712 VALUES <= (‘2017-12-31‘) on FX_DATA_2017,
T_POS_RETAIL_ORDER_HIS_201801 VALUES <= (‘2018-01-31‘)on FX_DATA_2018,
T_POS_RETAIL_ORDER_HIS_201802 VALUES <= (‘2018-02-28‘)on FX_DATA_2018,
T_POS_RETAIL_ORDER_HIS_201803 VALUES <= (‘2018-03-31‘)on FX_DATA_2018,
T_POS_RETAIL_ORDER_HIS_201804 VALUES <= (‘2018-04-30‘)on FX_DATA_2018,
T_POS_RETAIL_ORDER_HIS_201805 VALUES <= (‘2018-05-31‘)on FX_DATA_2018,
T_POS_RETAIL_ORDER_HIS_201806 VALUES <= (‘2018-06-30‘)on FX_DATA_2018,
T_POS_RETAIL_ORDER_HIS_201807 VALUES <= (‘2018-07-31‘)on FX_DATA_2018,
T_POS_RETAIL_ORDER_HIS_201808 VALUES <= (‘2018-08-31‘)on FX_DATA_2018,
T_POS_RETAIL_ORDER_HIS_201809 VALUES <= (‘2018-09-30‘)on FX_DATA_2018,
T_POS_RETAIL_ORDER_HIS_201810 VALUES <= (‘2018-10-31‘) on FX_DATA_2018,
T_POS_RETAIL_ORDER_HIS_201811 VALUES <= (‘2018-11-30‘) on FX_DATA_2018,
T_POS_RETAIL_ORDER_HIS_201812 VALUES <= (‘2018-12-31‘) on FX_DATA_2018)

alter TABLE
T_POS_RETAIL_ORDER_HIS
partition by Range (ORDER_DATE)(
T_POS_RETAIL_ORDER_HIS_201612 VALUES <= (‘2016-12-31‘) on ‘default‘,
T_POS_RETAIL_ORDER_HIS_201701 VALUES <= (‘2017-01-31‘) on ‘default‘,
T_POS_RETAIL_ORDER_HIS_201702 VALUES <= (‘2017-02-28‘) on ‘default‘,
T_POS_RETAIL_ORDER_HIS_201703 VALUES <= (‘2017-03-31‘) on ‘default‘,
T_POS_RETAIL_ORDER_HIS_201704 VALUES <= (‘2017-04-30‘) on ‘default‘,
T_POS_RETAIL_ORDER_HIS_201705 VALUES <= (‘2017-05-31‘) on ‘default‘,
T_POS_RETAIL_ORDER_HIS_201706 VALUES <= (‘2017-06-30‘) on ‘default‘,
T_POS_RETAIL_ORDER_HIS_201707 VALUES <= (‘2017-07-31‘) on ‘default‘,
T_POS_RETAIL_ORDER_HIS_201708 VALUES <= (‘2017-08-31‘) on ‘default‘,
T_POS_RETAIL_ORDER_HIS_201709 VALUES <= (‘2017-09-30‘) on ‘default‘,
T_POS_RETAIL_ORDER_HIS_201710 VALUES <= (‘2017-10-31‘) on ‘default‘,
T_POS_RETAIL_ORDER_HIS_201711 VALUES <= (‘2017-11-30‘) on ‘default‘,
T_POS_RETAIL_ORDER_HIS_201712 VALUES <= (‘2017-12-31‘) on ‘default‘,
T_POS_RETAIL_ORDER_HIS_201801 VALUES <= (‘2018-01-31‘) on ‘default‘,
T_POS_RETAIL_ORDER_HIS_201802 VALUES <= (‘2018-02-28‘) on ‘default‘,
T_POS_RETAIL_ORDER_HIS_201803 VALUES <= (‘2018-03-31‘) on ‘default‘,
T_POS_RETAIL_ORDER_HIS_201804 VALUES <= (‘2018-04-30‘) on ‘default‘,
T_POS_RETAIL_ORDER_HIS_201805 VALUES <= (‘2018-05-31‘) on ‘default‘,
T_POS_RETAIL_ORDER_HIS_201806 VALUES <= (‘2018-06-30‘) on ‘default‘,
T_POS_RETAIL_ORDER_HIS_201807 VALUES <= (‘2018-07-31‘) on ‘default‘,
T_POS_RETAIL_ORDER_HIS_201808 VALUES <= (‘2018-08-31‘) on ‘default‘,
T_POS_RETAIL_ORDER_HIS_201809 VALUES <= (‘2018-09-30‘) on ‘default‘,
T_POS_RETAIL_ORDER_HIS_201810 VALUES <= (‘2018-10-31‘) on ‘default‘,
T_POS_RETAIL_ORDER_HIS_201811 VALUES <= (‘2018-11-30‘) on ‘default‘,
T_POS_RETAIL_ORDER_HIS_201812 VALUES <= (‘2018-12-31‘) on ‘default‘)

 

-----删除索引 DROP INDEX <索引名>; 删除索引时,系统会从数据字典中删去有关该索引的
DROP INDEX T_POS_RETAIL_ORDER_HIS.I_T_POS_RETAIL_ORDER_HIS;
DROP INDEX T_POS_RETAIL_ORDER_ITEM_HIS.I_T_POS_RETAIL_ORDER_ITEM_HIS

----创建索引(默认ASC 升序) ---并将聚簇索引放在 default 段
CREATE CLUSTERED INDEX I_T_POS_RETAIL_ORDER_HIS ON T_POS_RETAIL_ORDER_HIS(ORDER_DATE ASC,ORDER_NO ASC) on ‘default‘;
CREATE UNIQUE INDEX I_T_POS_RETAIL_ORDER_ITEM_HIS ON T_POS_RETAIL_ORDER_ITEM_HIS(ORDER_DATE ASC,ORDER_NO ASC,ITEM_NO) on ‘default‘;


----只分区没建立索引 4s 分区同时建立索引 0.4s(如果在一个分区时更快 0.15s) 没有索引和分区 20s 建立索引0.5
SELECT
COUNT(1)
FROM T_POS_RETAIL_ORDER_ITEM_HIS
WHERE ORDER_DATE BETWEEN ‘2017-01-01‘ and ‘2017-08-31‘

以上是关于Sybase 表分区的主要内容,如果未能解决你的问题,请参考以下文章

Hive内部表、外部表、分区表、桶表概述

SQL Server 表分区之水平表分区

MySQL 表数据分区,每10000条数据自动分区

进入 Hive 表 - 非分区表到具有多个分区的分区表 - 无法插入目标表,因为列号/类型

进入 Hive 表 - 非分区表到具有多个分区的分区表 - 无法插入目标表,因为列号/类型

oracle数据库如何查看表的表分区的信息(每个表分区的名字和所属表空间)