存储桶数
‘壹’ 文件f建立简单的hash桶,使用100个hash桶,桶目录需要多少个磁盘块
题目描述:设文件F具有10000个记录,每个记录50字节,其中10字节用来表示文件的键值。每个磁盘块大小1000字节,指向磁盘块的指针占5字节,不允许记录跨两个块。
(1)如果为文件F建立简单的Hash索引,使用100个Hash桶,则桶目录需要多少磁盘块?平均每个桶需要多少磁盘块?
(2)如果为文件F建立B+索引,各磁盘块尽量填满,需要多少磁盘块存储索引?
答案:
(1)桶目录是是一个列表,100个桶可以存放在尺寸为100的int型数组中,一个int型占4个字节的话,总共400个字节,而一个磁盘块1000个字节,所以桶目录存放于1个磁盘块中;
给了100个Hash桶,一个桶里放100个记录,100个记录总共100*50=5000个字节,所以需要5000/1000=5个磁盘块。
(2)建立B+索引,从叶子节点算起,求出每个叶子节点的在尽量放满一块磁盘的情况下共存了多少条记录:10×R+5×R<=1000,R取66,所以叶节点的总数为⌈10000/66⌉=152个,即叶节点需要152个磁盘块;因为刚才计算出R=66,即上层节点是66叉树,那么上层节点数有⌈152/66⌉=3个,则需要3个磁盘块;再往上层节点走,只需要安排1个节点,即到达根节点。所以总共需要152+3+1个磁盘块。
‘贰’ 在磁盘中,文件的组织形式是一种什么格式
1.The part of a disk operating system that controls the organization and allocation of disk files, which may consist of one or more sectors.
磁盘操作系统的一部分,用来管理磁盘文件的组织与分配,这些磁盘文件可由一个或几个扇区组成。
2.with a relative or indexed file organization. Unlike a block, a bucket can contain only entire
由1至32磁盘信息块构成的一种存储结构。结合相对或索引文件组织,用于文件中数据单元的存储和传送。与信息块不同的是,存储桶只能包含整记录。
3.A storage structure of1 to32 disk blocks that is used to store and transfer units of data in files with a relative or indexed file organization. Unlike a block, a bucket can contain only entire records.
由1至32磁盘信息块构成的一种存储结构。结合相对或索引文件组织,用于文件中数据单元的存储和传送。与信息块不同的是,存储桶只能包含整记录。
‘叁’ 在散列文件组织中导致桶溢出的原因是什么
产生桶溢出的原因有两个:
初始设计时桶数偏少;散列函数的“均匀分布性”不好对于前一个原因,在设计散列函数时,桶数应放宽些,一般存储空间应有 20%的余量,它空闲着,以减少桶溢出的机会。
对于后一个原因,不管散列函数如何好, 再留有空间余量桶溢出现象难免还会发生,因此用封闭散列法和开放式散列法来解决桶溢出问题。
‘肆’ 到目前为止。世界石油现存储量为多少
目前处于全球石油储量占比中的前五名的分别是委内瑞拉、沙特以及加拿大、伊拉克,总储量是1422亿吨,占比是61.7%,对市场的石油供需量占着主导的位置。在2019年沙特一种是促成全球的原油减产,为了稳定油价的变化,当然是为了其沙特阿美IPO考虑,真正为了市场的几分不得而知。不过减产的效果还可以,沙特减产了5%,原油产量下降了4.9亿吨。不过俄罗斯作为减产联盟的支持者确没有减产而增长了0.8%,这主要是其在是不是减产上处于摇摆不定的情况。作为页岩油的主要储量地的美国则是奉行较为独立的准则,出现了增产的情况,在2019年增长最快,直接抵消了减产国家的努力。而这些矛盾对于发生在2020年3月份的原油暴跌埋下了祸根,因为新冠大流行造成了世界上的石油供需出现了极大不平衡,而造原油价格的大幅下跌。我国柴油和汽油价格也因此出现变化。
沙特和委内瑞拉作为世界上主要的产油国,这些国家经历几乎是完全是依靠出口石油。委内瑞拉现在储量是2965亿桶,按照其日消耗74.6万桶计算的死后,可以使用775年。沙特储量是2626亿桶,按照其现在出口的量,还可以使用273年
全球石油储量出现增长不代表着还是还会用之不竭,除了占比之外就是人类开采原油的速度。根据石油储量在前面20的国家数据,开采的年线是46.8年,当然中东的较长为60年,伊拉克则是82.8年。不过还有一点就是随着现在的油气勘探的技术提高,路上深层以及深海的资源可以作为主力军。当然现在再生资源也是一再发展,到时候不一定就会用到汽油枯竭。
‘伍’ 移动云存储网关和桶的挂载规则是什么
移动云存储网关和桶的挂载规则是一个存储网关主机可以挂载多个桶,不过,一个桶还是建议挂载到存储网关主机上的一个目录下。虽然一个桶可以挂载到多个存储网关主机,但不建议这样操作,可能会引起数据一致性等问题。
‘陆’ 甲类化学危险品仓库,750平方米能存储多少量
约2400桶,384吨。每4个铁桶摆放在一个托盘上,最多允许两层托盘摆放,四个桶要进行捆扎绑定,防止移动时意外滑落。托盘按标准是2.25m², 则750m2仓库可存放约300个托盘(考虑到垛距、垛墙间距、应急通道等)。
在用地面积足够的前提下,库房尽量宽敞,满足商品摆放要求,货物堆垛离墙0.3m以上,各类物品堆垛间距0.1m以上,主通道1.8m以上,支通道0.8m以上。单一贮存区最大贮量2000~2400 吨。
超出存储量,根据《危险化学品安全管理条例》第六十一条中“危险化学品专用仓库不符合国家标准对安全、消防的要求的;”由负责危险化学品安全监督管理综合工作的部门或者公安部门依据各自的职权责令立即或者限期改正,处1万元以上5万元以下的罚款;逾期不改正的,由原发证机关吊销危险化学品生产许可证、经营许可证和营业执照。
(6)存储桶数扩展阅读
危险化学品单位违反本条例的规定,有下列行为之一的,由负责危险化学品安全监督管理综合工作的部门或者公安部门依据各自的职权责令立即或者限期改正,处1万元以上5万元以下的罚款;逾期不改正的,由原发证机关吊销危险化学品生产许可证、经营许可证和营业执照;触犯刑律的,对负有责任的主管人员和其他直接责任人员依照刑法关于危险物品肇事罪、重大责任事故罪或者其他罪的规定,依法追究刑事责任:
(一)未对其生产、储存装置进行定期安全评价,并报所在地设区的市级人民政府负责危险化学品安全监督管理综合工作的部门备案,或者对安全评价中发现的存在现实危险的生产、储存装置不立即停止使用,予以更换或者修复,并采取相应的安全措施的;
(二)未在生产、储存和使用危险化学品场所设置通讯、报警装置,并保持正常适用状态的;
(三)危险化学品未储存在专用仓库内或者未设专人管理的;
(四)危险化学品出入库未进行核查登记或者入库后未定期检查的;
(五)危险化学品专用仓库不符合国家标准对安全、消防的要求,未设置明显标志,或者未对专用仓库的储存设备和安全设施定期检测的;
(六)危险化学品经销商店存放非民用小包装的危险化学品或者危险化学品民用小包装的存放量超过国家规定限量的;
(七)剧毒化学品以及构成重大危险源的其他危险化学品未在专用仓库内单独存放,或者未实行双人收发、双人保管,或者未将储存剧毒化学品以及构成重大危险源的其他危险化学品的数量、地点以及管理人员的情况,报当地公安部门和负责危险化学品安全监督管理综合工作的部门备案的;
(八)危险化学品生产单位不如实记录剧毒化学品的产量、流向、储存量和用途,或者未采取必要的保安措施防止剧毒化学品被盗、丢失、误售、误用,或者发生剧毒化学品被盗、丢失、误售、误用后不立即向当地公安部门报告的;
(九)危险化学品经营企业不记录剧毒化学品购买单位的名称、地址,购买人员的姓名、身份证号码及所购剧毒化学品的品名、数量、用途,或者不每天核对剧毒化学品的销售情况,或者发现被盗、丢失、误售不立即向当地公安部门报告的。
‘柒’ oracle查看表是否有直方图
直方图原理总结:
一)在oracle中使用直方图来表示数据的分布质量。它会按照某一列不同值出现的数量的多少,以及出现频率的高低来绘制数据的分布情况,以便能够指导优化器根据数据的分布做出正
确的选择(是使用索引还是全表扫描)。
二)如果where子句的过滤谓词的列上有一个合理的正确的直方图,它将会对优化器做出正确的选择发挥巨大的作用,使得sql语句执行成本最低从而提升性能。在获得准确的直方图信息
后,基于成本的优化器,就可以决定使用将返回少量行的索引,而避免使用基于限制条件返回许多行的索引。
三)直方图的使用不受索引的限制,可以在表的任何列上构建直方图。构建直方图最主要的原因就是,帮助优化器在表中数据严重倾斜时做出更好的抉择。例如:一到两个值(status=0
和status=1,其中=0有100条数据,=1有1000000条数据,只有这两个值)就构成了表中的大部分数据(数据倾斜),相关查询就可能无法帮助减少满足查询所需的I/O数量(如查询
status=1)。创建直方图可以让基于成本的优化器知道何时使用索引才最合适,或何时根据where子句中的值返回表中的80%的记录。
四)通常在以下场合建议创建和使用直方图:
1)当where子句引用了列值的分布情况存在明显偏差的列时:当这中偏差相当明显时,以至于where子句中的值将会使优化器选择不同的执行计划。这时,应该使用直方图来帮助优化
器来修正执行路径。(注意:如果查询不引用该列,则创建直方图没有意义。这种错误很常见,许多DBA会在偏差列上创建柱状图,即使没有任何查询引用该列)
2)当列值导致不正确的判断时:这种情况通常会发生在多表连接时,例如:假设有个五项的表连接,其结果集只有10行记录。oracle将会以一种第一个连接的结果集(集合基数)尽
可能小的方式将表连接起来。通过在中间结果集中携带更少的负载,查询将会运行的更快。为了使中间结果集最小化,优化器尝试在sql执行的分析阶段评估每个结果集的集合基数。
在偏差的列上拥有直方图将会极大的帮助优化器做出正确的决策。如优化器对中间结果集的大小做出不正确的判断,它可能会选择一种未达到最优化的表连接方法,因此向该列添加直
方图经常会向优化器提供使用最佳连接方法所需的信息。
五)直方图的分类:可分为等频直方图和等高直方图
等频直方图:针对包含很少不同值的数据集,就是数据分布很均匀。
等高直方图:针对包含很多不同值的数据集。 数据分布不均匀 ,由于列中数据很多,这时数据比较密集,不利于分析和评估,这时直方图需要均衡化默认的,如果一个倾斜列上的唯
一值超过了254个,那么oracle会对此列创建等高直方图,否则建立等频直方图。
直方图信息的准确性由两个数值决定,一个是bucket的个数,一个是num_distinct的个数。一般来说,bucket的数量越多,关于列数据分布的信息就越准确,但统计直方图花费的时间
就越多,oracle中bucket的最大为254个,默认是75个。而sql server中默认是200个。通常情况下当BUCTET < 表的NUM_DISTINCT值得到的是HEIGHT BALANCED(高度平衡)直方图,而
当BUCTET > 表的NUM_DISTINCT值的时候得到的是FREQUENCY(频率)直方图。由于满足BUCTET = 表的NUM_DISTINCT值概率较低,所以在Oracle中生成的直方图大部分是
HEIGHT BALANCED(高度平衡)直方图。在Oracle 10GR2之前如果使用dbms_stats包来创建直方图,那么如果指定需要创建的直方图的桶的数目与表的NUM_DISTINCT值相等,那么几乎
无法创建出一个FREQUENCY(频率)直方图,此时为了得到频率直方图只能使用analyze命令的“for all columns size 表的NUM_DISTINCT值”,这在某种程度上来说是一个退步,但这个
问题在Oracle 10GR2后被修正。但是如果列中有180 - 200个不同值时,还是无法创建FREQUENCY(频率)直方图.此时需要手工建立直方图,并写入数据字典方能完成FREQUENCY(频率)
直方图的创建。对于含有较少的不同值而且数据分布又非常不均匀的数据集来说,创建FREQUENCY(频率)直方图将会更加合适,因为它不存在会将低频出现的记录存入高频桶中的情况
,而HEIGHT BALANCED(高度平衡)直方图在存储桶(bucket)数分配不合理时就可能会出现这种情况。因此一定要在创建直方图前确定使用何种直方图,并且要合理估计存储桶(bucket)
个数。
六)如何创建直方图:
通过使用早先的analyze命令和最新的dbms_stats工具包都可以创建直方图。Oracle推荐使用后者来创建直方图,而且直方图的创建不受任何条件限制,可以在一张表上的任何你想创建
直方图的列上创建直方图。我们这里主要介绍如何通过dbms_stats包来创建直方图。
Oracle 通过指定 dbms_stats 的 method_opt 参数,来创建直方图。在 method_opt 子句中有三个相关选项,即 skewonly、repeat 和 auto。
“skewonly” 选项,它的时间性很强,因为它检查每个索引中每列值的分布。如果 dbms_stats 发现一个索引中具有不均匀分布的列,它将为该索引创建直方图,以帮助基于成本的 SQL
优化器决定是使用索引还是全表扫描访问。示例如下:
begin
dbms_stats. gather_table_stats (
ownname=> '',
tabname=>'',
estimate_percent =>dbms_stats.auto_sample_size,
method_opt=> 'for all columns size skewonly',
cascade=>true,
degree=> 7);
end;
其中degree指定了并行度视主机的CPU个数而定,estimate_percent指定了采样比率,此处使用了auto目的是让oracle来决定采样收集的比率,绘制直方图时会根据采样的数据分析结果
来绘制,当然也可以人为指定采样比率。如:estimate_percent=>20指定采样比率为20%,cascade=>true指定收集相关表的索引的统计信息,该参数默认为false,因此使用dbms_stats
收集统计信息是默认不收集表的索引信息的。
在对表实施监视 (alter table xxx monitoring;) 时使用 auto 选项,它基于数据的分布以及应用程序访问列的方式(例如由监视所确定的列上的负载)来创建直方图。示例如下:
begin
dbms_stats.gather_ table _stats(
ownname => '',
tabname=>'',
estimate_percent => dbms_stats.auto_sample_size,
method_opt => 'for all columns size auto',
cascade=>true,
degree => 7
);
end;
重新分析统计数据时,使用repeat选项,重新分析任务所消耗的资源就会少一些。使用repeat选项时,只会为现有的直方图重新分析索引,不再生成新的直方图。示例如下:
dbms_stats.gather_ table _stats(
ownname => '',
tabname=>'',
estimate_percent => dbms_stats.auto_sample_size,
method_opt => 'for all columns size repeat',
cascade=>true,
degree => 7
);
end;
七)创建直方图的考虑因素:
如果想为某一列创建直方图,示例如下:
dbms_stats.gather_ table _stats(
ownname => '',
tabname=>'',
estimate_percent => dbms_stats.auto_sample_size,
method_opt => 'for columns size 10 列名',
cascade=>true,
degree => 7
);
end;
其中size 10指定的是直方图所需的存储桶(bucket)数,所谓存储桶可以理解为存储数据的容器,这个容器会按照数据的分布将数据尽量平均到各个桶里,如一张表如果有6000条记
录,那么每个桶中平均就会有600条记录,但这只是一个平均数,每个桶中的记录数并不会相等,它会将高频出现记录集中在某一些桶中,低频记录会存放在少量桶中,因此如果存
储桶(bucket)数合适的增加就会减少高频记录使用的桶数,统计结果也会更加准确(可以避免被迫将低频记录存入高频桶中,影响优化器生成准确的执行计划)。所以我们最后得
到的直方图信息的准确性就由两个数值决定,一个是BUCTET的个数,一个NUM_DISTINCT的个数。所以创建直方图时首先要正确地估计存储桶(bucket)数。默认情况时,Oracle的直
方图会产生75个存储桶。可以把SIZE的值指定在1~254之间。
八)删除直方图信息:
在oracle中要删除直方图信息就是设置bucket的数据为1,如下:
Analyze table 表 compute statistics for table for columns id size 1;
exec dbms_stats.gather_table_stats('用户', '表',cascade=>false, method_opt=>'for columns 列 size 1');
但这却得再次收集表的统计信息,十分不合理,11g有如下方法可以直接删除直方图信息
dbms_stats.delete_column_stats(
ownname => '',
tabname => '',
colname => '',
col_stat_type => 'HISTOGRAM')
相关测试实验可参考:http://blog.sina.com.cn/s/blog_63972ba20100x3mh.html
九)直方图与绑定变量
主要测试直方图不适合在sql语句使用绑定变量场合下使用:http://blog.163.com/scott_guo/blog/static/18102608320122551225491/
十)查看表是否有直方图信息
User_Tab_Histograms(普通表)、User_Part_Histograms(表分区)中是否有相关表的记录
查询索引的选择率:索引的选择率=distinct_keys/num_rows*100%。如果此值比较小,则说明数据分布不均匀。
select a.owner,
a.index_name,
a.index_type,
partitioned,
b.num_rows,--表示表中有多少条记录
b.distinct_keys,--表示索引的列上有多少个不同的值
b.num_rows / b.distinct_keys avg_row_per_key,
b.distinct_keys / b.num_rows SELECTIVITY,
b.last_analyzed,
b.stale_stats
from dba_indexes a, dba_ind_statistics b
where a.owner = b.owner
and a.index_name = b.index_name
--and a.table_name='Q_PARTITION_RANGE'
and a.index_name = 'INDEX_LR_QOSSTAFFID_RANGE'
查询列上有没有直方图:
select owner,table_name,column_name,num_distinct,histogram,num_buckets from dba_tab_col_statistics
where table_name='Q_PARTITION_RANGE' and column_name='LR_STAFFID'
num_buckets为1表示此列没有直方图
有时,使用dbms_stats收集统计信息后反而不会走索引或者说走我们期望走的索引,此时用analyze收集确能走索引;但是使用analyze收集统计信息后,索引对应的列上可能没有直
方图信息,此时可改用dbms_stats来收集一下,然后查询该列是否有直方图信息,如果有了再次执行语句,看是否走索引,不走索引可以通过dbms_stats删除改列的直方图信息:
EXEC DBMS_STATS.GATHER_TABLE_STATS(OWNNAME=>'',TABNAME=>'',ESTIMATE_PERCENT=>100,DEGREE=>16,method_opt=>'for columns size 1 LR_STAFFID',CASCADE=>TRUE);
然后验证该列是否有直方图信息,并执行sql查看是否走索引。