首页
学习
活动
专区
圈层
工具
发布

第13期:表统计信息的计算

本篇介绍 MySQL 表如何计算统计信息。表统计信息是数据库基于成本的优化器最重要的参考信息;统计信息不准确,优化器可能给出不够优化的执行计划或者是错误的执行计划。...对统计信息的计算分为非持久化统计信息(实时计算)与持久化统计信息。...非持久化统计信息 统计信息没有保存在磁盘上,而是频繁的实时计算统计信息; 每次对表的访问都会重新计算其统计信息; 假设针对一张大表的频繁查询,那么每次都要重新计算统计信息,很耗费资源。...持久化统计信息 把一张表在某一时刻的统计信息值保存在磁盘上; 避免每次查询时重新计算; 如果表更新不是很频繁,或者没有达到 MySQL 必须重新计算统计信息的临界值,可直接从磁盘上获取; 即使 MySQL...总结 简单总结下,本篇主要介绍了 MySQL 表和索引的统计信息计算,包括持久化统计信息与非持久化统计信息。

86720

表和索引统计信息自动采集的问题

Oracle的CBO基于成本的优化器,计算过程中最重要的依据就是统计信息,而统计信息的采集存在着他的逻辑。...,才会写入表的统计信息, 因此当创建了一张新表,同时灌入了大量数据,在统计信息自动采集任务开始前就需要使用的情况下,建议人为采集统计信息,否则就可能导致因为统计信息不准,选错执行计划的场景。...,如果锁定某张表的统计信息,如下所示,执行了dbms_stats.lock_table_stats,表统计信息锁定可以从dba_tab_statistics的stattype_locked的字段进行判断...statistics,会提示错误,说对象统计信息已经锁定了, 从官方文档对lock_table_stats的介绍可以知道,当表的统计信息锁定,所有依赖于表的统计信息,包括表的统计信息、列的统计信息...、直方图,以及索引统计信息,都会被锁定, 因此,当锁定了表的统计信息时,如果显式使用compute statistics创建索引,就会提示错误,因为索引统计信息同样被锁定了,开锁前,不能采集。

80110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    表和索引统计信息自动采集的问题

    Oracle的CBO基于成本的优化器,计算过程中最重要的依据就是统计信息,而统计信息的采集存在着他的逻辑。...,才会写入表的统计信息, 因此当创建了一张新表,同时灌入了大量数据,在统计信息自动采集任务开始前就需要使用的情况下,建议人为采集统计信息,否则就可能导致因为统计信息不准,选错执行计划的场景。...,如果锁定某张表的统计信息,如下所示,执行了dbms_stats.lock_table_stats,表统计信息锁定可以从dba_tab_statistics的stattype_locked的字段进行判断...statistics,会提示错误,说对象统计信息已经锁定了, 从官方文档对lock_table_stats的介绍可以知道,当表的统计信息锁定,所有依赖于表的统计信息,包括表的统计信息、列的统计信息...、直方图,以及索引统计信息,都会被锁定, 因此,当锁定了表的统计信息时,如果显式使用compute statistics创建索引,就会提示错误,因为索引统计信息同样被锁定了,开锁前,不能采集。

    1.1K30

    「Mysql索引原理(十六)」维护索引和表-更新索引统计信息

    MySQL优化器使用的是基于成本的模型,而衡量成本的主要指标就是一个查询需要扫描多少行。如果表没有统计信息,或者统计信息不准确,优化器就很有可能做出错误的决定。...MyISAM将索引统计信息存储在磁盘中, ANALYZE TABLE需要进行一次全索引扫描来计算索引基数。在整个过程中需要锁表。...InnoDB引擎通过抽样的方式来计算统计信息,首先随机地读取少量的索引页面,然后以此为样本计算索引的统计信息。...InnoDB会在表首次打开,或者执行 ANALYZE TABLE,抑或表的大小发生非常大的变化(大小变化超过十六分之一或者新插入了20亿行都会触发)的时候计算索引的统计信息。...InnoDB在打开某些INF0RMATION_SCHEMA表,或者使用 SHOW TABLE STATUS和SHOW INDEX,抑或在MySQL客户端开启自动补全功能的时候都会触发索引统计信息的更新。

    2.3K40

    【DB笔试面试643】在Oracle中,如何查询表和索引的历史统计信息?

    ♣ 题目部分 在Oracle中,如何查询表和索引的历史统计信息?...♣ 答案部分 从Oracle 10g开始,当收集表的统计信息的时候,旧的统计数据被保留,如果因为新的统计信息而出现性能问题,旧的统计信息就可以被恢复。...历史统计信息保存在以下几张表中: l WRI$_OPTSTAT_TAB_HISTORY 表的统计信息 l WRI$_OPTSTAT_IND_HISTORY 索引的统计信息 l WRI$_OPTSTAT_HISTHEAD_HISTORY...默认情况下统计信息将被保留31天,可以使用下面的命令修改: EXECUTE DBMS_STATS.ALTER_STATS_HISTORY_RETENTION (XX); --xx是保留的天数 注意:...这些统计信息在SYSAUX表空间中占有额外的存储开销,所以应该注意并防止统计信息将表空间填满。

    3.1K20

    Spark SQL+Hive历险记

    的启动命令,同时使用--jars 标签把mysql驱动包,hadoop支持的压缩包,以及通过hive读取hbase相关的jar包加入进来,启动 Java代码 bin/spark-sql --jars...,大家可根据情况去舍 name := "scala-spark" version := "1.0" scalaVersion := "2.11.7" //使用公司的私服,去掉此行则使用默认私服...SparkContext(sc); //得到hive上下文 val hive = new org.apache.spark.sql.hive.HiveContext(sct); //执行sql,并打印输入信息...通过hive的元数据,查询hdfs数据或者hbase表等 //yarn-cluster集群模式不支持spark sql Error: Cluster deploy mode is not applicable...Spark SQL整合Hive时,一定要把相关的jar包和hive-site.xml文件,提交到 集群上,否则会出现各种莫名其妙的小问题, 经过在网上查资料,大多数的解决办法在Spark的spark-env.sh

    1.4K50

    spark sql on hive笔记一

    Spark sql on Hive非常方便,通过共享读取hive的元数据,我们可以直接使用spark sql访问hive的库和表,做更快的OLAP的分析。...spark 如果想直接能集成sql,最好自己编译下源码: 切换scala的版本为新版本 dev/change-scala-version.sh 2.11编译支持hive mvn -Pyarn -Phive...,像执行hive命令一样,进入交互式终端,进行即席查询,进入spark-sql交互式终端命令,并指定以yarn的模式运行: spark/bin/spark-sql --master yarn...本次使用的spark2.0.2,进入交互式终端之后,可以进行任意的查询分析,但本文的笔记例子,不是基于终端的spark sql分析,而是在Scala中使用spark sql on hive,在编程语言里面使用...开发程序是在IDEA里面写的,项目风格是Java+scala混搭采用maven管理,注意不是全scala项目,没有用sbt管理,sbt的国内下载非常慢,能访问外国网站的同学可以尝试一下。

    1.2K60

    关于使用MySQL innoDB引擎中事务和锁的信息记录表

    背景 在INNODB 1.0之前查看数据库线程的方式是通过命令行: show full processlist 查看inodb的所有进程 列表信息 字段名 说明 id 一个标识...state 显示使用当前连接的sql语句的状态,只是语句执行中的某一个状态,一个sql语句,已查询为例,可能需要经过copying to tmp table,Sorting result,Sending...1. information_schemma.INNODB_TRX 此表是查看当前运行的事务 表中对应的字段说明见下图 ?...3.information_schema.INNODB_LOCKS_WAITS 这个表可以让用户清楚的看到那个事务阻塞了那个事务,但是这里只给出事务ID,没有更详细的锁信息,但是lock_waits这张表和...locks,trx 是有关联的我们可以通过关联查询将其一并查出来 字段详情信息: ?

    2.4K20

    大数据技术学习路线

    1、hadoop快速入门 hadoop背景介绍 分布式系统概述 离线数据分析流程介绍 集群搭建 集群使用初步 2、HDFS增强 HDFS的概念和特性 HDFS的shell(命令行客户端)操作 HDFS...hive简介 hive架构 hive安装部署 hvie初使用 7、hive增强和flume介绍 HQL-DDL基本语法 HQL-DML基本语法 HIVE的join HIVE 参数配置 HIVE 自定义函数和...Spark 1、scala编程 scala编程介绍 scala相关软件安装 scala基础语法 scala方法和函数 scala函数式编程特点 scala数组和集合 scala编程练习(单机版WordCount...) scala面向对象 scala模式匹配 actor编程介绍 option和偏函数 实战:actor的并发WordCount 柯里化 隐式转换 2、AKKA与RPC Akka并发编程框架 实战:RPC...任务执行过程分析 RDD的Stage划分 5、Spark-Sql应用 Spark-SQL Spark结合Hive DataFrame 实战:Spark-SQL和DataFrame案例 6、SparkStreaming

    1.4K20

    Spark SQL 性能优化再进一步 CBO 基于代价的优化

    而执行节点输出数据集的大小与分布,分为两个部分:1) 初始数据集,也即原始表,其数据集的大小与分布可直接通过统计得到;2)中间节点输出数据集的大小与分布可由其输入数据集的信息与操作本身的特点推算。...所以,最终主要需要解决两个问题 如何获取原始数据集的统计信息 如何根据输入数据集估算特定算子的输出数据集 Statistics 收集 通过如下 SQL 语句,可计算出整个表的记录总数以及总大小 ANALYZE...serialization.format=|] Partition Provider Catalog Time taken: 1.691 seconds, Fetched 36 row(s) 通过如下 SQL 语句,可计算出指定列的统计信息...使用 HyperLogLog 的原因有二 使用 HyperLogLog 计算 distinct count 速度快速 HyperLogLog 计算出的 distinct count 可以合并。...例如可以直接将两个 bin 的 HyperLogLog 值合并算出这两个 bin 总共的 distinct count,而无须从重新计算,且合并结果的误差可控 算子对数据集影响估计 对于中间算子,可以根据输入数据集的统计信息以及算子的特性

    1.1K30

    Spark SQL 性能优化再进一步 CBO 基于代价的优化

    而执行节点输出数据集的大小与分布,分为两个部分:1) 初始数据集,也即原始表,其数据集的大小与分布可直接通过统计得到;2)中间节点输出数据集的大小与分布可由其输入数据集的信息与操作本身的特点推算。...所以,最终主要需要解决两个问题 如何获取原始数据集的统计信息 如何根据输入数据集估算特定算子的输出数据集 Statistics 收集 通过如下 SQL 语句,可计算出整个表的记录总数以及总大小 ANALYZE...serialization.format=|] Partition Provider Catalog Time taken: 1.691 seconds, Fetched 36 row(s) 通过如下 SQL 语句,可计算出指定列的统计信息...使用 HyperLogLog 的原因有二 使用 HyperLogLog 计算 distinct count 速度快速 HyperLogLog 计算出的 distinct count 可以合并。...例如可以直接将两个 bin 的 HyperLogLog 值合并算出这两个 bin 总共的 distinct count,而无须从重新计算,且合并结果的误差可控 算子对数据集影响估计 对于中间算子,可以根据输入数据集的统计信息以及算子的特性

    1.5K30

    Note_Spark_Day08:Spark SQL(Dataset是什么、外部数据源、UDF定义和分布式SQL引擎)

    ,Schema就是数据内部结果,包含字段名称和字段类型 RDD[Person] 与 DataFrame比较 DataFrame知道数据内部结构,在计算数据之前,可以有针对性进行优化,提升性能...区别与联系 2、外部数据源 如何加载和保存数据,编程模块 保存数据时,保存模式 内部支持外部数据源 自定义外部数据源,实现HBase,直接使用,简易版本 集成Hive,从Hive表读取数据分析...,也可以将数据保存到Hive表,企业中使用最多 使用Hive框架进行数据管理,使用SparkSQL分析处理数据 3、自定义UDF函数 2种方式,分别在SQL中使用和在DSL中使用 4、分布式...SQL引擎 此部分内容,与Hive框架功能一直 spark-sql 命令行,专门提供编写SQL语句 类似Hive框架种hive SparkSQL ThriftServer当做一个服务运行,使用...方式一:SQL中使用 使用SparkSession中udf方法定义和注册函数,在SQL中使用,使用如下方式定义: 方式二:DSL中使用 使用org.apache.sql.functions.udf函数定义和注册函数

    4.8K40
    领券