-
2018-09-22 11:49:49
# coding=utf-8
from pyecharts import EffectScatter
import random
v1 = [10, 20, 30, 40, 50, 60]
v2 = [25, 20, 15, 10, 60, 33]
es = EffectScatter("动态散点图示例")
es.add("effectScatter", v1, v2)
es.render('effectScatter.html')
更多相关内容 -
mysql视图之创建可更新视图的方法详解
2020-12-15 02:00:48本文实例讲述了mysql视图之创建可更新视图的方法。分享给大家供大家参考,具体如下: 我们知道,在mysql中,视图不仅是可查询的,而且是可更新的。这意味着我们可以使用insert或update语句通过可更新视图插入或更新... -
oracle 动态性能视图大全
2018-12-19 21:45:37本文详细介绍oracle 动态性能视图,基本上涵盖了所有的视图 -
在Django中创建动态视图的教程
2020-09-21 21:30:55主要介绍了在Django中创建动态视图的教程,Django是Python重多人气框架中最为著名的一个,需要的朋友可以参考下 -
在Navicat中创建MySQL动态视图的方法
2016-10-13 14:43:00在Navicat中创建MySQL动态视图的方法,附图解。 -
动态刷新网格视图或列表视图的内容效果
2021-04-01 16:12:08该源码实现了怎样使用滑动的方式来实现动态刷新列表视图或网格视图的内容。也就是或对网格视图的每个子视图的内容,新内容从可以上往下移动代替旧内容效果;而对于列表的单元的每一行单元格,可以让新的内容从左往右... -
用Oracle动态性能视图采集查询调优数
2020-03-03 23:41:29V$SQL: 这个视图使用一个CLOB(character large object,字符型巨对象)column,以提供SQL语句的完整文本,此外还有一列最多存放1000个 VARCHAR2字符的对象,这方便了使用。V$SQLAREA: 这个视图包含许多和V$SQL相同的... -
Android 动态加载二维码视图生成快照的示例
2021-01-20 09:12:12动态视图生成快照的实现 3.踩坑点提要 获取不到动态视图的bitmap 无法获取最新动态视图的bitmap 4.开发实现 动态加载的视图的布局文件代码: <?xml version=1.0 encoding=utf-8?> <LinearLayout xmlns... -
基于概率的动态视图安全发布方法
2021-02-21 15:51:51静态视图安全研究无法适应实际应用,如何保证动态视图的安全发布亟待解决。为了解决这个问题,首先提出了可能世界构造方法和隐私泄露概率计算方法,并给出了各种视图合并情况下的隐私泄露概率计算公式。然后,从相对安全... -
Oracle中的数据字典技术和动态性能视图
2012-01-06 20:25:19数据字典视图和动态性能视图的区别 : a:数据字典视图名一般用复数,而动态性能视图名一般用单数,比如dba_tablepsaces vs v$tablespace。 b:数据字典视图只有在数据库opn的情况下才可以访问,而部分动态性能视图... -
动态性能视图
2012-06-27 16:16:56介绍动态性能视图。这些视图一般作为V$视图引用。本文档包括下列内容: 动态性能视图。 视图说明。 -
IOS 动态添加视图
2013-12-19 16:33:26可以实现动态添加需要的视图,例如button或者是imageview,对有需要上传多张图片的应用很有用。 -
MySQL视图简介及基本操作教程
2021-01-21 15:03:32前言 视图是数据库系统中一种非常有用的数据库对象。MySQL 5.0 之后的版本添加了对... 存储在数据库中的查询操作 SQL 语句定义了视图的内容,列数据和行数据来自于视图查询所引用的实际表,引用视图时动态生成这些数据 -
VS2008 C#动态获取数据库视图和存储过程信息
2021-05-09 02:52:08内容索引:C#源码,数据库应用,存储过程 VS2008编写一C#程序,动态获取数据库中的所有视图和存储过程信息,仅包括代码,暂时不包括数据库,需要手动还愿出数据库。 -
可动态添加新视图和Segment的功能
2021-04-03 06:41:22该源码实现了可动态添加新视图和Segment的功能,源码FHSegmentedViewController,SegmentView控制视图切换,支持动态添加新视图和Segment源码,大家可以看看那功能的是怎么实现的吧。 Custom view controller ... -
ios-动态壁纸视图.zip
2019-07-11 19:03:43动态壁纸视图, 可播放本地或远程. https://github.com/WKCLoveYang/WKCPhotoLiveView -
Oracle常用动态视图
2021-03-31 20:32:33Oracle常用动态视图 v$instance:显示当前实例的状态 v$database:显示当前数据库的状态 v$datafile:数据库使用的数据文件信息 v$log:从控制文件中提取有关重做日志组的信息 v$logfile:有关实例重置日志组文件名...Oracle常用动态视图
v$instance:显示当前实例的状态
v$database:显示当前数据库的状态
v$datafile:数据库使用的数据文件信息
v$log:从控制文件中提取有关重做日志组的信息
v$logfile:有关实例重置日志组文件名及其位置的信息
v$parameter:初始化参数文件中所有项的值
v$session:有关会话的信息
v$process:当前进程的信息
v$sysstat - 系统统计信息和用户会话统计信息
v$pgastat - 显示内存使用统计信息
v$sql_workarea - sql游标所在工作区的信息
v$sql_workarea_active - 当前系统工作区的信息
-
Oracle动态性能视图
2015-11-16 22:59:16Oracle动态性能视图,对学习oracle有非常好帮助。 -
Oracle-动态性能视图解读
2016-11-18 19:43:36概述动态性能视图属于数据字典,它们的所有者为SYS,并且多数动态性能视图只能由特权用户和DBA用户查询。当数据库处于不同状态时,可以访问的动态性能视图有所不同。启动例程时,ORACLE会自动建立动态性能视图;停止...系列相关
动态性能视图概述
动态性能视图属于数据字典,它们的所有者为SYS,并且多数动态性能视图只能由特权用户和DBA用户查询。
当数据库处于不同状态时,可以访问的动态性能视图有所不同。
启动例程时,ORACLE会自动建立动态性能视图;停止例程时,ORACLE会自动删除动态性能视图。
数据字典信息是从数据文件中获得,而动态性能视图信息是从SGA和控制文件取得。
所以,两者所反映的信息还是有很大差异的。数据库管理员利用这些动态性能视图,可以了解数据库运行的一些基本信息,为我们进行数据库维护以及数据库性能优化提供一些数据上的支持。
动态性能视图在数据库打开和使用时不断进行更新,而且它们的内容主要与性能有关。
虽然这些视图很像普通的数据库表,但它们不允许用户直接进行修改。
这些视图提供内部磁盘结构和内存结构方面的数据。用户可以对这些视图进行查询,以便对系统进行管理与优化。
所有动态性能视图都是以
V_$
开始的,ORACLE为每个动态性能视图提供了相应的同义词(V$开头).V$
是V_$
的同义词。通过查询
V$FIXED_TABLE
,可以显示所有动态性能视图.
数据库不同的状态下的动态性能视图
一般情况下,我们可以通过动态性能数据掌握两类重要的数据库运行信息。
- 了解数据库运行相关的性能数据,如内存的使用量、磁盘排序发 生的机率等等。
- 取得与磁盘和内存结构相关的其他信息。
在通常情况下, 数据库不同的状态其动态性能视图还是有比较大的差异:
NOMOUNT
启动例程时,ORACLE会打开参数文件,分配SGA并启动后台进程。因此例程处于NOMOUNT状态时,只能访问从SGA中获取信息的动态性能视图。
SGA----V$PARAMETER V$SGA V$OPTION V$PROCESS V$SESSION V$VERSION V$INSTANCE
MOUNT
装载数据库时,ORACLE根据初始化参数control_file 打开所有控制文件。当例程处于MOUNT状态时,不仅可以访问从SGA中获取信息的动态性能视图,还可以访问从控制文件中获取信息的动态性能视图。
控制文件-------V$THREAD V$CONTROLFILE V$DATABASE V$DATAFILE V$DATAFILE_HEADER V$LOGFILE
OPEN
数据库打开时,ORACLE按照控制文件所记载的信息打开所有数据文件和重做日志。除了可以访问SGA和控制文件中获取信息的动态性能视图外,还可以访问与ORACLE性能相关的动态性能视图(
V$FILESTAT V$SESSION_WAIT V$WAITSTAT
)注意的是,只有处于OPEN状态时,才能访问数据字典视图。
V$, V_$, GV$, X$
X$ 表
X$
表包含了特定实例的各方面的信息, 是 Oracle 数据库的运行基础, 如当前的配置信息,连接到实例的会话,以及丰富而有价值的性能信息。X$
表并不是驻留在数据库文件的永久表或临时表。X$
表仅仅驻留在内存中,当实例启动时, 由 Oracle 应用程序动态创建,在内存中进行实时的维护。它们中的大多数至少需要装载或已经打开的数据库。
X$
表为 SYS 用户所拥有,并且是只读的。 不能进行 DML(更新,插入,删除)。 表对数据库来说至关重要,所以 Oracle 不允许 SYSDBA 之外的用户直接访问, 显示授权不被允许。
关于
X$
表,其创建信息我们也可以通过bootstrap$
表查看,该表中记录了数据库启动的基本及驱动信息。bootstrap$
实际上存储的是数据字典的基表的定义,如OBJ$,C_OBJ$,TAB$
等等。Oracle 通过读取这些定义创建数据字典的基表,进而创建数据字典。
查询必须是sys用户,dba权限的用户没有权限查询。
GV$
和V$
同义词V$
视图动态性能视图由前缀
V_$
标识。这些视图的公用同义词具有前缀 V$。数据
库管理员或用户应该只访问V$
对象,而不是访问V_$
对象。一旦实例启动,从内存读取数据的 V$视图就可以访问了。
注意: 每个
V$
视图都包含类似语句:where inst_id = USERENV('Instance')
用于限制返回当前实例信息。
这一点我们可以通过
V$FIXED_VIEW_DEFINITION
视图 来验证select view_definition from v_$fixed_view_definition where view_name='V$FIXED_TABLE';
必须使用sys用户查询。
通过
v$fixed_table
查询V$
视图信息:DBA用户即可。
SQL> select count(*) from v$fixed_table where name like 'V$%'; COUNT(*) ---------- 552
GV$
视图从 Oracle8 开始,
GV$
视图开始被引入,GV$
(Global V$
,全局V$
)。除了一 些 特 例 以 外 (如 :
V$CACHE_LOCK 、 V$LOCK_ACTIVITY 、
V$LOCKS_WITH_COLLISIONS 和 V$ROLLNAME
),每个V$
视图都有一个对应的GV$
视图存在。在并行服务器环境下,可查询
GV$
视图从所有限定实例中检索V$
视图的信息V$
视图和GV$
视图是相同的,V$
比GV$
只是少了 INST_ID字段。举个栗子
v$parameter
和gv$parameter
INST_ID 列显示从其获得相关的
V$
视图信息的实例号。 INST_ID 列可用
作一个从可得到的实例集检索V$
信息的过滤器。如:
SQL>SELECT * FROM GV$LOCK WHERE INST_ID = 1;
表示从实例 1 上的
V$
视图中检索信息。
通过
v$fixed_table
查询GV$
视图信息SQL> select count(*) from v$fixed_table where name like 'GV$%'; COUNT(*) ---------- 523 SQL> select count(*) from v$fixed_table where name like 'V$%'; COUNT(*) ---------- 552
从查询结果看,
GV$
是 523个,V$
是 552个,从这个结果可以证明:不是每个V$
同义词都有对应的GV$
同义词。
V$FIXED_VIEW_DEFINITION
视图通过
V$FIXED_VIEW_DEFINITION
视图可以获取组成V$
视图的底层
X$
表的所有信息。比如查看
V$FIXED_TABLE
视图定义SQL> select a.VIEW_DEFINITION from v$fixed_view_definition a where a.VIEW_NAME = 'V$FIXED_TABLE'; VIEW_DEFINITION ------------------------------------------------------------- select NAME , OBJECT_ID , TYPE , TABLE_NUM from GV$FIXED_TABLE where inst_id = USERENV('Instance')
从这里, 我们看到
V$FIXED_TABLE
基于GV$FIXED_TABLE
创建。查看
GV$FIXED_TABLE
定义SQL> select view_definition from v$fixed_view_definition where view_name='GV$FIXED_TABLE'; VIEW_DEFINITION ------------------------------------------------------------ select inst_id,kqftanam, kqftaobj, 'TABLE', indx from x$kqfta union all select inst_id,kqfvinam, kqfviobj, 'VIEW', 65537 from x$kqfvi union all select inst_id,kqfdtnam, kqfdtobj, 'TABLE', 65537 from x$kqfdt
从这里, 我们找到了 GV$FIXED_TABLE 视图的创建语句,该视图基于
X$
表创建。
GV_$, V_$
视图动态性能的视图是通过 catalog.sql 创建。当 catalog.sql 运行时:
create or replace view v_$fixed_table as select * from v$fixed_table; create or replace public synonym v$fixed_table for v_$fixed_table; create or replace view gv_$fixed_table as select * from gv$fixed_table; create or replace public synonym gv$fixed_table for gv_$fixed_table;
我们注意到, 先创建
V_$
和GV_$
视图, 然后基于V_$
视图和GV_$
视图来创建V$
和GV$
同义词。所以,实际上通常我们访问的
V$
视图,其实是指向V_$
视图的同义词。
而V_$
视图是基于X$
表建立的。
关于这一点可以通过:v$fixed_view_definition
视图 来验证。
动态性能对象那么多,如何来判断某个对象到底是同义词还是视图呢? 可以通
过如下 SQL 来实现:SQL> select object_type from all_objects where object_name=upper('v$datafile'); OBJECT_TYPE ------------------- SYNONYM
常用动态性能视图
维护数据库、调整数据库性能时,需要经常访问动态性能视图,以获取例程的动态信息。大多数动态性能视图只能由特权用户和DBA用户访问。
1、
V$FIXED_TABLE
该动态性能视图用于列出所有可用的动态性能视图和动态性能表。
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 Connected as cc@cc SQL> select * from v$fixed_table ; NAME OBJECT_ID TYPE TABLE_NUM ------------------------------ ---------- ----- ---------- X$KQFTA 4294950912 TABLE 0 X$KQFVI 4294950913 TABLE 1 X$KQFVT 4294951149 TABLE 2 .......
2、
V$INSTANCE
获取当前例程的详细信息。
SQL> col host_name format a20 SQL> select instance_name,host_name,status from V$instance; INSTANCE_NAME HOST_NAME STATUS ---------------- -------------------- ------------ cc entel2 OPEN SQL>
3、V$SGA
显示SGA主要组成部分
SQL> col name format a25; SQL> col value format a25; SQL> select * from V$sga ; NAME VALUE ------------------------- ------------------------- Fixed Size 2265384 Variable Size 1258295000 Database Buffers 5251268608 Redo Buffers 18993152
4、
V$SGAINFO
取得SGA的更详细信息
select * from v$sgainfo ;
5、
V$PARAMETER
取得初始化参数的详细信息
select a.NAME ,a. VALUE ,a.DESCRIPTION from v$parameter a where a.name='db_name';
6.
V$VERSION
获取ORACLE版本的详细信息
SQL> select * from v$version ; BANNER ------------------------------------------------------------ Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production PL/SQL Release 11.2.0.4.0 - Production CORE 11.2.0.4.0 Production TNS for Linux: Version 11.2.0.4.0 - Production NLSRTL Version 11.2.0.4.0 - Production
7.
V$OPTION
显示已经安装的ORACLE选项
SQL> select * from v$option; PARAMETER VALUE -------------------- ------------------------------ Partitioning TRUE Objects TRUE Real Application Clusters FALSE Advanced replication TRUE Bit-mapped indexes TRUE Connection multiplexing TRUE .........
8. V$SESSION
显示会话的详细信息
SQL> select sid,serial#,username from V$session where username is not null; SID SERIAL# USERNAME ---------- ---------- ------------------------------ 1 3293 DRMR80 5 10127 DRMR80 7 44691 CC 8 8603 CC ................
如果username为NULL,则表示是后台进程会话。
9.
V$PROCESS
显示与ORACLE相关的所有进程信息(包括后台进程和服务器进程)
select a.terminal,a.spid,a.pga_alloc_mem from V$process a ,V$session b where a.addr=b.paddr and b.username='CC';
10.
V$BGPROCESS
显示后台进程详细信息
select name,description from V$bgprocess where paddr<>'00';
11.
V$DATABASE
取得当前数据库的详细信息
SQL> select name, log_mode,created from V$database; NAME LOG_MODE CREATED --------- ------------ ----------- CC NOARCHIVELOG 2016-06-27
V$CONTROLFILE
取得当前数据库所有控制文件的信息。
SQL> select * from v$controlfile;
13.
V$DATAFILE
取得当前数据库的所有数据文件的详细信息
select file#,name,bytes from v$datafile ;
14.
V$DBFILE
取得数据文件编号及名称
select * from v$dbfile ;
V$LOGFILE
显示重做日志成员的信息
SQL> col member format a50 SQL> select group#,member from V$logfile; GROUP# MEMBER ---------- -------------------------------------------------- 1 /oradata/cc/redo01.log 2 /oradata/cc/redo02.log 3 /oradata/cc/redo03.log
16.
V$LOG
显示日志组的详细信息
select group#,thread#,sequence#,bytes,members,status from V$log;
17. V$THREAD
取得重做线程的详细信息,当使用RAC结构时,每个例程都对应一个重做线程,并且每个重做线程包含独立的重做日志组。
select thread#,status,groups,instance,sequence# from v$thread ;
18.
V$LOCK
显示锁信息,通过与
V$SESSION
进行连接查询,可以显示占有锁的会话,以及等待锁的会话。select a.username,a.machine,b.lmode,b.request from V$session a,V$lock b where a.sid=b.sid and a.type='USER';
19.
V$LOCKED_OBJECT
显示被加锁的数据库对象。通过与DBA_OBJECTS进行连接查询,以显示具体的对象名及执行加锁操作的ORACLE用户名。
select a.oracle_username,b.owner||'.'||b.object_name object from V$locked_object a,dba_objects b where a.object_id=b.object_id;
20.
V$ROLLNAME V$ROLLSTAT
V$ROLLNAME
显示处于ONLINE状态的UNDO段,V$ROLLSTAT
显示UNDO段的统计信息。通过二者执行连接查询,以显示UNDO的详细统计信息。select a.name,b.xacts from V$rollname a,V$rollstat b where a.usn=b.usn;
21. V$TABLESPACE
显示表空间信息
select * from v$tablespace a ;
oracle最重要的9个动态性能视图
v$session + v$session_wait (在10g里功能被整合,凑合算1个吧.) v$process --显示与ORACLE相关的所有进程信息(包括后台进程和服务器进程) v$sql v$sqltext v$bh (更宁愿是x$bh) v$lock v$latch_children v$sysstat v$system_event
按组分的几组重要的性能视图
1.System 的 over view
v$sysstat ,--整个系统的统计信息 v$system_event , --This view contains information on total waits for an event.每个事件的等待情况 v$parameter
2.某个session 的当前情况
v$process , v$session , v$session_wait ,--This view lists the resources or events for which active sessions are waiting. 当前活动的会话正在等待的事件情况 v$session_event , --This view lists information on waits for an event by a session. 每个会话对每个事件的等待情况 v$sesstat –-每个会话的统计信息
3.SQL 的情况
v$sql , v$sqlarea , v$SQL_PLAN , V$SQL_PLAN_STATISTICS, v$sqltext_with_newlines
4. Latch / lock /ENQUEUE(闩,锁相关)
v$latch , v$latch_children , v$latch_holder , v$lock ,V$ENQUEUE_STAT ,V$ENQUEUE_LOCK
5. IO 方面的
v$segstat , v$filestat , v$tempstat ,v$datafile , v$tempfile
6.shared pool / Library cache
v$Librarycache , v$rowcache , x$ksmsp
7.几个advice也不错
v$db_cache_advice , v$PGA_TARGET_ADVICE, v$SHARED_POOL_ADVICE
8.等待事件:
v$system_event, v$session_wait ,v$session_event
9.块竞争:
v$waitstat-- This view lists block contention statistics.块竞争引起的等待统计
10.热块:
v$bh
Oracle 性能相关的几个视图和参数
性能视图是 Oracle 中一些记录数据库性能方面的视图,通过查看这些视图,
获得数据库当前或历史上某个时间的性能数据。 它比 SQL_TRACE, AWR 报告获取数据更及时,便捷。V$SQL
V$SQL
视 图 是 一 个 DBA 使 用 频 率 非 常 高 的 动 态 视 图 , 它 通 常 和V$SESSION
一起使用来获得当前会话的一些 SQL 执行情况。可以通过该视图查看正在执行的 SQL 语句及这条 SQL 运行了多长时间或者它正在等待什么样的事件。
用 V$SQL 查看 SQL 内容:
为了获取用户连接到数据库中的信息,需要先从
V$SESSION
视图确定用户的 SID 号,然后用v$session
和v$sql
查看相关信息。SQL>select * from v$session;
从这里确定根据 machine 列和 program 列确定 SID。
根据 SID 确定 SQL:
SELECT a.sql_text, b.status, b.last_call_et, b.event FROM v$sql a, v$session b WHERE a.sql_id = b.sql_id AND b.sid = 771;
也可以根据进程号来查看:
SELECT sql_text FROM v$sqltext a WHERE (a.hash_value, a.address) IN (SELECT DECODE(sql_hash_value, 0, prev_hash_value, sql_hash_value), DECODE(sql_hash_value, 0, prev_sql_addr, sql_address) FROM v$session b WHERE b.paddr = (SELECT addr FROM v$process c WHERE c.spid = '&pid')) ORDER BY piece ASC
用 V$SQL 查看 SQL 执行和等待时间
对于已经执行完毕的会话,可以在 V$SQL 视图中找到它的执行时间和消耗的 CPU 时间,这些信息对我们分析一些性能上存在问题的 SQL 有用处。比如对比 SQL 消耗的 CPU 和执行时间,就可以大致知道 SQL 语句执行中是否有长时间的等待事件:
select * from v$sql ; SELECT sql_text, cpu_time / (1000 * 1000) t_cpu, TRUNC (elapsed_time / (1000 * 1000)) t_elap, (cpu_time / elapsed_time / (1000 * 1000)) * 100 pct FROM v$sql WHERE sql_text LIKE 'SELECT OFFER_GROUP_ID_SEQ.NEXTVAL FROM DUA%';
如果说 T_ELAP 时间比较多,而 CPU 时间比较少,说明这条语句在执行过程中基本处于等待状态。
共享池中的 SQL
并不是所有的 SQL 语句都可以从 V$SQL 中找到,因为 ORACLE 会动态地
更新共享池的信息,将一些过旧的 SQL 从共享池中删除,以便于新的 SQL 语句提供共享池的空间我们可以手动的清空共享池中的信息, SQL 语句如下:
SQL>alter system flush shared_pool;
我们知道, SQL 的解析的过程中,会把硬解析之后的 SQL 放在放在共享池
中,如果我们清空了共享池,那么就需要重新做硬分析。
V$SQL_SHARED_CURSOR
这个视图存放了 SQL 在执行过程中游标共享的信息, 它能帮助我们分析看起来一样的 SQL,为什么没有共享的原因。
SQL> show parameter cursor_sharing NAME TYPE VALUE ------------------------------------ ----------- ------------ cursor_sharing string EXACT SQL>
查看 SQL:
select parsing_user_id puid, parsing_schema_id psid, sql_text, sql_id, child_address from v$sql where sql_text like 'SELECT REF_VALUE_ID,REF_VALUE_TYPE%';
如果这里有多条 SQL_TEXT, SQL_ID 相同的,就说明 SQL 没有重用.
用如下 SQL 来确定是哪里不一致造成.
查看不能重用原因:
select * from v$sql_shared_cursor where sql_id='fwfm66c9cs1q8'
如 果 这 里 有 Y , 就 是 导 致 不 能 重 用 的 原 因 , 这 些 字 母 和
V$SQL_SHARED_CURSOR
每个字段对应。
V$SESSION
我们可以从该视图查看用户会话的信息。可以使用 machine 或者 module 找
到我们的用户。- Macine 是客户端机器的名称,
- userName 是会话连接时提供的用户名,
- Program 是客户端执行程序的名称,
- module 是 Oracle 的存储过程DBMS_ALLPLCATION_INFO.SET_MODULE 给出的执行程序的名称。
这种直接查询 v$session 视图的方法只适合哪种两层结构的 C-S 架构,这种是客户端直接连接到数据库。
但是现在基本都是三层架构。 通过中间件如weblogic 来连接数据库。 这种情况下就需要在中间件服务上进行跟踪,比如获得用户道和中间件的连接信息,然后根据中间件的信息或者日志来确定用户的最终信息。
V$SESSION 常用来查看用户当前的状态,当前执行的 SQL 语句, SQL 语句执行时间,以及等待事件等。
V$SESSION 里面有个字段 last_call_et(单位:秒),表示执行时间,这里有两
种状态:- Session 处于 active 状态,该字段表示 session 变成 active 到现在的时间;
- Session 处于 inactive 状态, 此时表示 session 变成 inactive 到现在的时间。
查询 active 的 session:
SELECT a.sql_text, b.sid, b.status, b.last_call_et, b.event FROM v$sql a, v$session b WHERE a.sql_id = b.sql_id AND b.STATUS='ACTIVE';
查询 inactive 的 session:
SELECT a.sql_text, b.sid, b.status, b.last_call_et, b.event FROM v$sql a, v$session b WHERE a.sql_id = b.sql_id AND b.STATUS='INACTIVE';
注意:
在 RAC 状态下,会话需要来自不同的实例,所以在 RAC 环境下需要使用GV$SESSION
视图, 因为这个视图含有 INST_ID 字段,通过这个字段可以区别实例。
V$SESSTAT
这个视图记录了某个 session 从运行以来各种资源统计数据,通过关联表
v$statname
可以查询出某个 session 的资源消耗情况.SELECT a.sid, b.name, a.VALUE FROM v$sesstat a, v$statname b WHERE a.sid = 837 AND a.statistic# = b.statistic# AND b.name IN ('consistent gets', 'physical reads', 'parse count (total)', 'parse count (hard)');
查看 SID=837 的 session 的信息。
V$SESSION_WAIT
V$SESSION_WAIT
记录了会话的一些等待信息,这些等待息在v$session
视图里可以可以查到。SELECT event, p1, p1text, p2, p2text, p3, p3text, wait_time, seconds_in_wait, state FROM v$session_wait WHERE sid = 837;
性能参数
性能参数指它的设置会影响数据库性能问题的初始化参数。 这些参数比较多,具体参考 ORACLE 官网文档。
CURSOR_SHARING
该参数决定在什么情况下可以使用共享游标,即 SQL 重用。它有三个值:
EXACT, SIMILAR 和 FORCE.默认情况下, oracle 将该参数值是 EXACT. 意思是 SQL 必须绝对一样才能共享游标,否则将作为新的 SQL 语句处理。
这种设置的意义在于, 从 Oracle 层面来看,通过精确地匹配每个 SQL 语句,就可以保证只有语句完全相同的 SQL,才可以在共享池中被重用,否则将作为新的 SQL 语句对待。
而把构造完全一样的 SQL 语句的任务留给用应用来完成,即由应用来通过变量绑定的方式达到 SQL 重用,而不是依赖 ORACLE 来实现.
这样的好处是可以大大减少 ORACLE 花费在 SQL 分析上的资源消耗( cursor_sharing=similar) ,及避免 Oracle 不加判断地绑定变量导致执行计划选择的错误( cursor_sharing=force) .
cursor_sharing=exact(默认值)
这种情况下,只有 SQL 完全一样的,才会在共享池中重用 SQL,我们可以使用绑定变量来实现 SQL 一样。
但是在 OLTP 系统中,如果绑定变量的效果不太好,将 CURSOR_SHARING 设置为 exact 就会增加 Oracle 对 SQL 的硬分析量,消耗更多的系统资源。 如果出现这种情况, cursor_sharing 就需要设置为其他的两个值。
cursor_sharing=similar
SQL> alter session set cursor_sharing=similar; 会话已更改。 SQL> select * from all_objects set_similar where object_id=10; SQL> select * from all_objects set_similar where object_id=20; SQL> select sql_text from v$sql where sql_text like '%set_similar%'; SQL_TEXT ------------------------------------------------------------------------------ select * from all_objects set_similar where object_id=:"SYS_B_0" select * from all_objects set_similar where object_id=:"SYS_B_0"
如果你测试的结果不一样,把共享池清空一下就可以了:
SQL> alter system flush shared_pool;
从这个结果看,当设置 cursor_sharing=similar 时, Oracle 会将 SQL 语句中的谓词条件用同一个名称的一个变量替代: SYS_B_0, 如果谓词中还有其他变量,将一次使用 SYS_B_1, SYS_B_2. 这两条语句看起来一样,但是, Oracle 依然会把它们作为 2 条 SQL 语句来处理。
cursor_sharing=force
SQL> alter session set cursor_sharing=force; SQL> select * from all_objects set_similar where object_id =2; SQL> select * from all_objects set_similar where object_id =1; SQL> select sql_text from v$sql where sql_text like '%set_similar%'; SQL_TEXT ------------------------------------------------------------- select * from all_objects set_similar where object_id =:"SYS_B_0"
如果你测试的结果不一样,把共享池清空一下就可以了:
SQL> alter system flush shared_pool;
从上面的结果看,当设置 cursor_sharing=force 时, Oracle 会把这两条 SQL
语句的谓词用变量 SYS_B_0 代替,并且将它们看做同一条 SQL 语句来处理。在 OLTP 系统才能使用绑定变量带来性能上的提升,因为在这样的系统中,SQL 执行计划基本上是相同的,不会因为谓词的条件而改变。
而在 OLAP 系统中,因为 OLAP 系统中数据的变化非常大,列上的数据分布也可能很不均匀,这时候使用绑定变量,可能会出现问题。
按照 Oracle 官方的说法,将参数值设置为 EXACT 是最优的。但是它的前提是需要通过应用程序绑定变量来达到最优的 SQL 重用。
只有高效的变量绑定,EXACT 值才是最优的。
而 Similar 和 Force 是在系统没有使用绑定变量时,为了降低系统大量的 SQL 解析而使用的补救方法,但是它有很多问题,如不加区别或者略加区别的对谓词强制绑定变量,导致 SQL 的执行计划错误。
similar和 force的区别
Similar: 如果 CBO (CBO优化器)发现被绑定变量的谓词还有其他执行计划可以选择:
- 如果谓词条件的值有变化,就将会产生一个新的子游标,而不是重用之前的 SQL语句;
- 如果谓词没有其他的执行计划可选择,则忽略谓词的值,重用之前的 SQL语句。
Force: CBO 和 SQL 语句的所有谓词用变量替换,只做一次硬解析,之后
所有的 SQL 都重用第一个 SQL 语句。
DB_FILE_MULTIBLOCK_READ_COUNT
Oracle 在做一次连续的数据库扫描时,一次 I/O 允许读取的最大数据块数,但有一个限制,就是每次 I/O 的大小不能超过 Oracle 运行的操作系统的最大 I/O值(通常是 1M).
SQL> show parameter db_file_mul NAME TYPE VALUE ------------------------------------ ----------- ------------ db_file_multiblock_read_count integer 128
假 设 一 张 表 有 10240KB 大 小 , 数 据 块 的 大 小 为 8kb , 设 置DB_FILE_MULTIBLOCK_READ_COUNT=32,那么我们对这张表做全表扫描的次数为: 10240/(32*8)=40 次,即 Oracle 对这张表做扫描需要花费 40 次 I/O。
但是实际上, Oracle 花费的 I/O 次数可能大于这个值,也可能小于这个值。因为 Oracle 在读多个数据库时,当内存中已经有了某个数据块时,Oracle 就不再从磁盘中读取它。
对于 OLTP 数据库来说,每次用户读取的记录数非常少,这个值可以考虑设置的小一点;对于 OLAP 系统,因为查询的量非常大,所以可以考虑设置大一些。
注意: 多数据块读取操作只发生在一下两种情况:
- FTS(FULL TABLE SCAN)
- INDEX_FFS(INDEX FAST FULL SCAN)
这个参数在10g R2 版本后, Oracle 不建议修改它的默认值。 当设置这个值为默认值时, Oracle 会通过收集 SQL 的 I/O 情况,来动态设置这个参数的值,如果手工修改了它的默认值, Oracle 将确定使用这个新值。
这个参数影响到 CBO 对成本的评估,通常来说,这个值设置的越大, FFS或者 INDEX_FFS 得成本就会越低,执行计划就越向这面倾斜。
-
Mysql 视图基础和动态创建视图
2019-01-31 16:58:52视图并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。 视图的优点: 使用视图,可以定制用户数据,聚焦特定的数据 根据不同的需求,可以创建不同的视图,...视图的定义:
视图(View)是一种虚拟存在的表,对于使用视图的用户来说基本上是透明的。视图并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。
视图的优点:
- 使用视图,可以定制用户数据,聚焦特定的数据
根据不同的需求,可以创建不同的视图,满足不同的权限所能查到的数据,也能屏蔽一些隐私性信息。
- 使用视图,可以简化数据操作
一个复杂的查询创建成视图之后,我们只需要一个简单的sql语句查询视图,或者视图进行关联查询,不需要每次都把原来的复杂查询再写一遍。
- 使用视图,基表中的数据就有了一定的安全性
视图是一张虚拟的表,并不实际存放数据,只能看到视图里面所展示出来的数据,不能随意篡改和删除数据,保证了安全性。
- 可以合并分离的数据,创建分区视图
一个大公司,下属都设有很多的分公司,为了管理方便,我们需要统一表的结构,定期查看各公司业务情况,而分别看各个公司的数据很不方便,没有很好的可比性,如果将这些数据合并为一个表格里,就方便多啦,这时我们就可以使用union关键字,将各分公司的数据合并为一个视图。
视图的缺点:
性能:从数据库视图查询数据可能会很慢,特别是如果视图是基于其他视图创建的。
表依赖关系:将根据数据库的基础表创建一个视图。每当更改与其相关联的表的结构时,都必须更改视图
以上定义来源于网络的总结。
创建视图:
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] VIEW view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION]
ALGORITHM :创建视图的算法
undefined:未定义(默认的):没有算法
temptable:临时表算法:系统应该先执行视图的select语句,后执行外部查询的语句
merge:合并算法:系统应该先将视图对应的select语句与外部查询视图的select语句进行合并,然后执行(效率高)
select_statement :sql语句
WITH :约束
修改视图:
ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] [DEFINER = { user | CURRENT_USER }] [SQL SECURITY { DEFINER | INVOKER }] VIEW view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION]
删除视图:
DROP VIEW [IF EXISTS] view_name [, view_name] ...
示例:
create view couponlist as select t.*,t2.nominalValue from a_zhoukun.t_market_coupon_rule as t left join a_zhoukun.t_market_coupon_nominal as t2 on t.fk_nominalId = t2.id where t.`type` = 1 order by t.id desc
视图创建结果:
在基本的理解中,mysql的视图是不能通过传参来动态创建的,创建好视图后结果集也是一定的(随着基表的变化而变化),那么随之而来的问题就是当我们查询把视图作为主表关联其他表来做关联查询(或者多个视图关联查询)之后,它们所产生的笛卡尔积的数量就会比较大。而当数据量非常大的时候,查询的效率就会变的很低。
为了解决这个问题,我可以使用传参的方法来动态的生成视图,这样能很有效的减少笛卡尔积的数量,加快查询的效率
创建set_user的函数
DELIMITER // create FUNCTION set_user(mobilePhone VARCHAR(20)) returns varchar(20) BEGIN set @mobilePhone = mobilePhone; return @mobilePhone; END // DELIMITER ;
创建getuser函数
DELIMITER // create FUNCTION get_user() returns varchar(20) BEGIN return @mobilePhone; END // DELIMITER ;
创建视图:
DELIMITER // create view user_view AS select mobile_phone,reg_source,user_name from b_user_reg where mobile_phone = bh_user.get_user(); // DELIMITER ;
查询视图:
select * from user_view where set_user('13100000001') = '13100000001';
-
SQL视图
2020-12-14 23:06:01与包含的数据表不一样,视图只包含使用时动态检索的数据查询。作为视图,他不包含任何列或数据,包含的只是一个查询。 为什么使用视图? 1:重用sql语句。 2:简化复杂的sql操作。在编写查询后,可以方便的... -
MySQL在多表上创建视图方法
2020-12-16 12:22:47MySQL中,在两个或者以上的基本表上创建视图 在student表和stu_info表上,创建stu_class视图,查询出s_id号、姓名和班级 首先,创建stu_info表,并向表中插入数据 查看表中的数据 创建stu_class视图 查看视图 ... -
Oracle动态性能视图[收集].pdf
2021-10-11 05:16:16Oracle动态性能视图[收集].pdf -
通过动态参数视图分解ORACLE数据库.pdf
2021-10-10 07:02:04通过动态参数视图分解ORACLE数据库.pdf -
oracle 数据字典、数据字典视图,动态性能视图(展示数据库的活动状态信息)
2022-03-30 06:51:13动态性能视图2.1 概念2.2 常见的动态性能视图v$parameterv$processv$sessionv$sysstatv$logv$logfilev$lockv$transactionv$fixed_view_definition 一.数据字典 1.1 概念 数据字典记录数据库最基本的信息,包括数据... -
动态性能视图概述
2017-11-21 13:24:46动态性能视图概述 动态性能视图属于数据字典,它们的所有者为SYS,并且多数动态性能视图只能由特权用户和DBA用户查询。 当数据库处于不同状态时,可以访问的动态性能视图有所不同。 启动例程时,ORACLE会... -
DM常用动态性能视图
2021-07-25 23:17:07DM数据库常用动态性能视图。 -
UML基本概念——动态视图
2020-08-23 23:50:204.2 动态视图 故名思义,动态视图是描述事物动态行为的。需要注意的是,动态视图不能够独立存在,它必须特指一个静态视图或UML元素,说明在静态视图规定的事物结构下它们的动态行为。本节讲述的动态视图包括活动图... -
oracle动态性能视图
2012-03-23 12:08:50oracle动态性能视图