我正在寻找方法来提高数据库对于繁重的分析查询的性能,并发现我的临时表空间有 1M 范围(统一表空间的默认值)。由于我通常的临时表空间使用量远高于每个查询 1GB(具有大量连接/排序/组的顶级查询可能消耗多达 100 GB 的临时表空间),1M 范围对我来说看起来太低了。为了性能而增加范围大小是否值得?
主页
/
user-274627
Andy DB Analyst's questions
Andy DB Analyst
Asked:
2023-10-24 16:38:09 +0800 CST
我们有一个按月分区的大表范围。增量统计已开启。在预定的统计数据收集之后,基数估计变得很奇怪,比如
select count(*) from my_table where date >= trunc(sysdate) - 30 and date < trunc(sysdate)
给出 1.3M 行,但估计为 20K。只有在手动重新收集统计数据后,估计才会变得准确。代码示例:
-- Scheduled
dbms_stats.gather_table_stats
(
ownname=> 'ownname',
tabname=> 'tabname' ,
estimate_percent=> DBMS_STATS.AUTO_SAMPLE_SIZE,
cascade=> DBMS_STATS.AUTO_CASCADE,
degree=> 4,
no_invalidate=> DBMS_STATS.AUTO_INVALIDATE,
granularity=> 'AUTO',
method_opt=> 'FOR ALL COLUMNS SIZE AUTO'
);
-- Manual
DBMS_STATS.GATHER_TABLE_STATS
(
ownname => '"ownname"',
tabname => '"tabname"',
partname => '"partname"',
method_opt => 'FOR COLUMNS DATE SIZE 254',
estimate_percent => 1
);
其他分区表都没问题。
该表与其他表之间的区别是(据我们所知):
- 该表中存在错误插入。大多数日期在 2014 年和 2023 年之间,但有一些行包含 1970 年和 2024 年(我们无法更改它)。还有 2045 的空分区。我们尝试重新创建它,但没有得到相同的行为。
- 我们搞乱了直方图,删除了一些自动创建的直方图,并手动创建了一些基于函数的有用的直方图。但在 USER_TAB_COL_STATISTICS 和 USER_TAB_HISTOGRAMS 中,存在 DATE 列的直方图。
什么会导致这种行为?我们该如何解决它?
Andy DB Analyst
Asked:
2023-10-05 22:43:42 +0800 CST
当尝试对一些十六进制值进行排序时,我得到了 MAX() 聚合和 ORDER BY desc 排序的不同结果:
with some_data as
(
select '123A55' as hex
from dual
union all
select '123255' as hex
from dual
)
select max(hex)
from some_data
;
Result: 123A55
with some_data as
(
select '123A55' as hex
from dual
union all
select '123255' as hex
from dual
)
select *
from some_data
order by hex desc
;
Result:
123255
123A55
在 MySQL DB 中,这两种情况都给出 123A55。
ORACLE 中 MAX() MIN() 和 ORDER BY 的排序顺序是否有不同的规则?