数据库服务器使用散列算法在数据分发高速缓存内存储和查找信息。DS_POOLSIZE 配置参数控制数据分发高速缓存的大小,以及可以在数据分发高速缓存中存储的列分发总数。DS_POOLSIZE 配置参数的值表示数据分发高速缓存中的最大分发数的一半。
要修改数据字典高速缓存中的存储区数,使用 DS_HASHSIZE 配置参数。
Distributions_per_bucket = DS_POOLSIZE / DS_HASHSIZE
要修改每个存储区的分布数,更改 DS_POOLSIZE 或 DS_HASHSIZE 配置参数。
例如,使用 DS_POOLSIZE 的缺省值 127 和 DS_HASHSIZE 的缺省值 31,可能能够在数据分发高速缓存中存储大约 254 列的分发。高速缓存已满时,数据库服务器会自动将高速缓存的大小增大 10%。
例如,使用 DS_POOLSIZE 的缺省值 127 和 DS_HASHSIZE 的缺省值 31,可能能够在数据分发高速缓存中存储大约 127 列的分发。高速缓存有 31 个散列存储区,且每个散列存储区平均有 4 个条目。
如果在为表运行 UPDATE STATISTICS 时没有指定列,那么数据库服务器将为表中的所有列生成分布信息。
您可以将 DD_HASHSIZE 和 DD_HASHMAX 的值用作 DS_HASHSIZE 和 DS_POOLSIZE 的准则。DD_HASHSIZE 和 DD_HASHMAX 指定数据字典高速缓存的大小,该高速缓存存储信息以及查询访问的表的统计信息。
对于大中型系统,开始时可以设置以下值:
通过运行 onstat -g dsc 命令查看实际使用情况来监视这些高速缓存,从而可以相应地调整这些参数。
为列存储分布时所需的内存量取决于运行 UPDATE STATISTICS 的级别。单个列的分布可能需要 1 KB 至 2 MB,这取决于您是指定 MEDIUM 还是 HIGH 方式,还是在运行 UPDATE STATISTICS 时输入了更精确的解析百分比。
数据库服务器尝试将数据分布高速缓存中的条目数维持在 DS_POOLSIZE 值。 如果条目总数达到 DS_POOLSIZE 的一个内部阈值,那么数据库服务器将按照最久未使用机制从数据分布高速缓存中除去条目。散列存储区中的条目数可以超过此 DS_POOLSIZE 值,但数据库服务器最终会在内存需求降低时减少条目数。
当散列存储区已经包含条目时会发生溢出。 如果多个分布散列到同一个存储区中,数据库服务器将保留一个溢出列表以存储和检索第一个分布之后的分布信息。
如果 DS_HASHSIZE 和 DS_POOLSIZE 大小几乎相同,那么溢出列表可能较小甚至不存在,这会浪费内存。但是,未使用的内存量整体来说可以忽略。