问题标签 [table-statistics]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
294 浏览

r - 在具有许多站点的数据集中测试正态性

我是 R 的比较新手,我正试图用它来评估来自大约 1900 个单独站点的水质数据的正常性(或其他)。每个站点都有一个独特的 3 年期间的样本Sitecode结果。Meas_res数据保存在按Sitecode/Sample Date顺序排序的 .csv 文件中。我想运行 Andersen Darling 测试(以及nortest包中的其他类似评估)以获得以下一般形式的输出:

Sitecode, 广告测试输出写回 .csv 文件格式

有人可以给我一组代码来运行测试或指导如何准备它吗?

0 投票
3 回答
28905 浏览

hadoop - 有什么方法可以使用单个分析命令计算所有分区的配置单元表的统计信息?

我在 hive 中看到的用于计算统计数据的语法似乎表明标题问题的答案是“否”:

然而,我想把它扔在这里,因为令人惊讶的是它总是需要编写一个脚本来迭代分区以生成每个分区的语句。我们现在在这个小表上有大约一千个分区,并且它将按数量级增长。

顺便说一句,我在没有指定分区的情况下尝试了以下操作:

0 投票
1 回答
183 浏览

php - 为我的 ERP 系统做销售统计,但性能很差

我有一个用 PHP 编写的带有 mySQL 数据库的 ERP 系统,其中包含我过去 4 年的所有订单。现在我想做一个函数来生成销售统计。应该可以设置搜索条件,如销售员、部门和年份/期间。

销售统计数据应按客户分组。就像这个链接上的插图:http: //maabjerg.eu/illustration_stat.png

我的客户表:

我的订单表:

我做这个没有问题,但性能很差。我之前的做法是这样的:

我希望有人能给我建议如何使这成为最好的方法。

提前致谢。

史蒂芬

0 投票
2 回答
142 浏览

sql - 删除过滤的统计信息会导致死锁

我们有一个大型数据仓库数据库,我们不断地在 5 个不同的表中插入新行,位于 b 树的左侧(编辑:右侧)(=在表的末尾)

这意味着对于新数据,普通统计数据很快就会过时。所以我们改变了我们的插入过程,也使用覆盖最新两百万行的 WHERE 子句执行 CREATE STATISTICS FST_xxx。

这确保了我们不会得到不正确的执行计划。现在我们被数百个这样的人困住了。我们有一个每天运行一次的清理作业,它将删除不需要的统计信息。

但这会导致很多死锁。

有没有办法禁用过滤统计信息或删除过滤统计信息而不会导致死锁?

(编辑:)该表聚集在 Bigint Identity(1,1) asending 上。

0 投票
1 回答
561 浏览

oracle - 为一个巨大的 oracle 表收集统计信息 - 担心崩溃服务器

我正在尝试改善 Oracle 数据库视图的执行时间,这需要很长时间才能加载,并且它涉及一个包含 15,352,595 条记录的表。我正在考虑收集有关它的统计数据,因为我怀疑性能不佳是由于统计数据陈旧。

但是,我担心这会给服务器带来很大负担,而且我不太相信它的硬盘(或任何硬件组件)可以承受繁重的工作负载而不会损坏。

这是真的应该担心吗?

0 投票
1 回答
64 浏览

sql - 一个维度上的最小值,然后是另一个维度上的最大值

我有一个如下所示的 SQL 表:

等等。我想取维度上的平均值,j然后取维度上的最小值i。在这种情况下,对维度取平均值j会产生以下结果:

然后在维度上取最小值i产生值 1.0,这是最终结果。是否有一种有效的方法来执行本示例中的查询,即按指定顺序执行一系列降维操作的查询?

注意,如果我们颠倒操作顺序,中间结果是

对维度取平均值j会产生 0.9 的最终结果。因此,操作的顺序很重要。

菲利普

http://phillipmfeldman.org

0 投票
2 回答
1243 浏览

oracle - 收集没有索引的表的统计信息

定期收集 Oracle 数据库中没有索引的表的统计信息是否有意义?我是从优化的角度问的。我假设总是对该表执行 FULL TABLE SCAN。

0 投票
6 回答
3603 浏览

oracle - 在 Oracle 11g 分区表上收集并发统计信息

我正在 Oracle 11g 上开发 DWH。我们有一些大表(250+ 百万行),按值分区。每个分区分配给不同的馈送源,每个分区相互独立,因此可以同时加载和处理。

数据分布很不均匀,我们有百万行的分区,也有不超过百行的分区,但是我没有选择分区方案,顺便也改不了。

考虑到数据量,我们必须保证每个分区总是有最新的统计数据,因为如果后续的细化没有对数据的最佳访问,它们将永远持续下去。

所以对于每个并发的 ETL 线程,我们

  1. 截断分区
  2. 从暂存区加载数据

SELECT /*+ APPEND */ INTO big_table PARTITION(part1) FROM temp_table WHERE partition_colum = PART1

(这样我们有直接的路径,我们不锁定整个表)

  1. 我们收集修改后的分区的统计信息。

在项目的第一阶段,我们使用了APPROX_GLOBAL_AND_PARTITION策略并像魅力一样工作

但是,我们有一个缺点,当我们加载一个小分区时,APPROX_GLOBAL 部分占主导地位(仍然比 GLOBAL 快很多),对于一个小分区,我们有例如 10 秒的加载和 20 分钟的统计信息。

所以我们被建议切换到 11g 的INCREMENTAL STATS特性,这意味着你不指定你修改过的分区,你把所有的参数都保留在 auto 中,Oracle 做到了,自动了解哪些分区有被触动了。它确实有效,我们确实加快了小分区的速度。开启该功能后,通话变成了

请注意,您不再通过分区,也没有指定样本百分比。

但是,我们有一个缺点,可能比前一个更糟糕,这与我们拥有的高并行度相关。

假设我们有 2 个同时启动的大分区,它们也将几乎同时完成加载阶段。

  1. 第一个线程结束插入语句、提交并启动统计信息收集。stats 程序注意到有 2 个分区被修改(这是正确的,一个已满,第二个被截断,正在进行事务),正确更新两个分区的统计信息。

  2. 最终第二个分区结束,收集统计信息,它看到所有分区都已经更新,什么也不做(这是不正确的,因为第二个线程同时提交了数据)。

结果是:

结果是我偶尔会遇到非最佳计划(这意味着终止会话,手动刷新统计信息,再次手动启动进程)。

我什至尝试在聚会上设置一个排他锁,所以最多只有一个线程可以同时在同一张表上收集统计信息,但没有任何改变。

恕我直言,这是一个奇怪的行为,因为 stats 过程在第二次被调用时,应该检查第二个分区上的最后一次提交,并且应该看到它比最后一次统计数据收集时间更新。但似乎它没有发生。

难道我做错了什么?它是甲骨文的错误吗?我如何保证所有统计信息始终是最新的,并开启了增量统计功能,并且具有高水平的并发性?

0 投票
1 回答
2249 浏览

oracle - 为什么 Oracle 会在导入后锁定我的模式的统计信息?

我的问题是我有一个模式,其中所有表的统计信息都被锁定。

我在互联网上发现我可以使用该DBMS_STATS.UNLOCK_TABLE_STATS (SCHEMA_NAME)程序解锁。

我需要知道的是 Oracle 如何确定何时锁定统计信息以及何时不锁定,以避免此类情况。

0 投票
1 回答
79 浏览

sql-server - SQL Server基于值分布的最优查询

我有一个以键值对格式存储动态用户数据的表。像这样的东西:

现在,我需要选择具有某些参数的用户,例如:gender is 'male' AND country 是 'US'。或更笼统地说:

为此,我发现最快的方法是执行以下操作:

在这种情况下,如果第一个 WHERE 过滤器用于值更均匀和隔离的过滤器,我会得到最好的结果。

例如,“性别”可以有 99% 的男性和 1% 的女性,国家可以将整个人口划分为 100 个相似的部分。在这种情况下,我需要先按国家/地区过滤并使用 EXIST 作为性别条件。

问题: SQL Server 2008 R2 中是否有任何方法可以获取索引统计信息以查找哪个子句最好放在第一位(基本上不在 EXISTS 中)?

替代问题:我认为这是最好的方法,但是将查询重写为始终最佳的方法也可以是解决方案。

解决方案信息:

正确的解决方案是下面@usr 解释的解决方案(使用INTERSECT)。实际上,似乎我做错了什么,EXISTS引擎也正确解决了问题。为了提供更多信息,我将分享 IO 和 TIME 统计信息以及测试选项的执行计划:

使用INTERSECT

使用 INTERSECT 的查询计划

使用EXISTS

使用 EXISTS 的查询计划

(注意额外的Stream Aggregate步骤)

使用INNER JOIN

使用 INNER JOIN 的查询计划

结论:

INTERSECT在这种情况下稍快一点EXISTS。该INNER JOIN选项要慢得多。