精华内容
下载资源
问答
  • 动态视图分割动态视图分割动态视图分割动态视图分割动态视图分割动态视图分割
  • 动态性能视图

    2012-06-27 16:16:56
    介绍动态性能视图。这些视图一般作为V$视图引用。本文档包括下列内容: 动态性能视图。 视图说明。
  • 动态切分视图

    2011-12-19 15:08:28
    点击工具栏的文件打开,可以实现打开并显示一幅位图,单击工具栏并动态切分视图按钮,可以切分视图
  • 这是一个FlexibleScrollerView动态滚动视图案例,源码FlexibleScrollerViewSample,模仿最美应用动态滚动视图,图片伸缩,按钮固定到导航栏。 测试环境:Xcode 6.2,iOS 6.0以上
  • oracle动态性能视图

    2012-08-30 21:20:05
    oracle动态性能视图, 非常不错,oracle动态性能视图,oracle动态性能视图
  • 本文详细介绍oracle 动态性能视图,基本上涵盖了所有的视图
  • ORACLE 动态性能视图

    2009-11-30 15:13:24
    本附录介绍动态性能视图。这些视图一般作为V$视图引用。
  • 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';

     

     

    展开全文
  • ORACLE动态性能视图

    2012-06-07 11:23:49
    这些视图被称为动态性能视图,因为它们在数据库打开和使用时不断进行更新,而且它们的内容主要与性能有关。 虽然这些视图很像普通的数据库表,但它们不允许用户直接进行修改。这些视图提供内部磁盘结构和内存结构...
  • Oracle-动态性能视图解读

    万次阅读 2016-11-18 19:43:36
    概述动态性能视图属于数据字典,它们的所有者为SYS,并且多数动态性能视图只能由特权用户和DBA用户查询。当数据库处于不同状态时,可以访问的动态性能视图有所不同。启动例程时,ORACLE会自动建立动态性能视图;停止...

    系列相关

    ORACLE常用性能监控SQL【一】

    ORACLE常用性能监控SQL【二】

    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$parametergv$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$sessionv$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 放在放在共享池
    中,如果我们清空了共享池,那么就需要重新做硬分析。

    Oracle SQL的硬解析和软解析

    Oracle SQL Trace 和 10046 事件


    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)

    Oracle 索引扫描的五种类型

    这个参数在10g R2 版本后, Oracle 不建议修改它的默认值。 当设置这个值为默认值时, Oracle 会通过收集 SQL 的 I/O 情况,来动态设置这个参数的值,如果手工修改了它的默认值, Oracle 将确定使用这个新值。

    这个参数影响到 CBO 对成本的评估,通常来说,这个值设置的越大, FFS或者 INDEX_FFS 得成本就会越低,执行计划就越向这面倾斜。

    展开全文
  • IOS 动态添加视图

    2013-12-19 16:33:26
    可以实现动态添加需要的视图,例如button或者是imageview,对有需要上传多张图片的应用很有用。
  • Oracle动态性能视图

    2015-11-16 22:59:16
    Oracle动态性能视图,对学习oracle有非常好帮助。
  • 动态性能视图 数据字典 讲述ORACE常用的视图的使用等知识。
  • 详细讲解了oracle主要的动态性能视图,值得评鉴
  • Oracle 动态性能视图

    2007-08-08 14:39:31
    Oracle 动态性能视图
  • ios-动态壁纸视图.zip

    2019-07-11 19:03:43
    动态壁纸视图, 播放本地或远程. https://github.com/WKCLoveYang/WKCPhotoLiveView
  • 数据字典和动态性能视图---动态视图  动态性能视图用于记录当前历程的活动信息。 管理表空间和数据文件---表空间  建立表空间使用create tablespace命令完成。一般由dba来完成的  建立数据表空间:在建立数据库...

    数据字典和动态性能视图---动态性视图

     动态性能视图用于记录当前历程的活动信息。

    管理表空间和数据文件---表空间

      建立表空间使用create tablespace命令完成。一般由dba来完成的

      建立数据表空间:在建立数据库后,为便于管理表,最好建立自己的表空间

      create tablespace sp001 datafile 'd:\test\sp001.dbf' size 20m uniform size 128k

      使用数据表空间:
      
         create table mypart(deptno number(4),dname varchar2(14),loc varchar2(13)) tablespace sp001;

     改变变空间的状态:
     
      a.使表空间脱机 alter tablespace 表空间名 offline;
      b.使表空间联机 alter tablespace 表空间名 online;
      c.只读表空间 alter tablespace sp001 read only;
      d.可读可写  alter tablespace sp001  read write;

    1.知道表空间名,显示该表空间包括的所有表

     select * from all_tables where tablespace_name='表空间名';

    2.知道表名,查看该表属于哪个表空间。

     select  tablespace_name,table_name from user_tables where table_name='emp';

    3.删除表空间

      drop tablespace '表空间名' including contents and datafiles;

       说明:including contents 表示删除表空间时、删除该空间的所有数据库对象,而datafiles表示将数据库文件也删除。

    4.扩展表空间

      a.增加数据文件
      sql>alter tablespace sp001 add datafile 'f:\test\sp002.dbf' size 20m;

      b.增加数据文件的大小
      sql>alter tablespace sp001 'f:\test\sp001.dbf' resize 20m;

      c.设置文件的自动增长
      sql>alter tablespace sp001 'f:\test\sp001.dbf' autoextend on next 10m maxsize 200m;


     5.移动数据文件

       1)确定数据文件的表空间
           select tablespace_name from dba_data_files where file_name='f:\test\sp001.dbf';
       2)使表空间脱机
          确保数据文件的一致性,将 表空间转变为offline的状态
         alter tablespace sp001 offline;
       3)使用命令移动数据文件到指定的目标位置
        sql>host move f:\test\sp001.dbf d:\test\sp001.dbf
       4)执行alter tablespace 命令
        在物理上移动数据后,还必须执行alter tablespace命令对数据库文件进行逻辑修改。
       sql>alter tablespace sp001 rename datafile 'f:\test\sp001.dbf' to 'd:\test\sp001.dbf';
       5)使表空间联机
         sql>alter tablespace sp001 online;

    展开全文
  • 20个常用oracle动态性能视图 详细
  • 不过,它也有一些列会动态的变化,用于检查用户。如例: SQL_HASH_VALUE,SQL_ADDRESS:这两列用于鉴别默认被session执行的SQL语句。如果为null或0,那就说明这个session没有执行任何SQL语句。PREV_HASH_VALUE和...
  • 附录A 动态性能视图.pdf.教材版本的动态性能视图,值得大家一看啊
  • android 动态视图渲染

    2017-11-01 17:29:57
    根据数据结构动态渲染视图,render.view 为渲染视图结构。
  • Android动态添加视图

    千次阅读 2014-08-15 15:51:57
    在更高的Android应用中,往往需要动态添加视图。要


             在更高的Android应用中,往往需要动态添加视图。要实现这个功能,最重要的是获得当前视图容器对象,这个容器对象所对应的类需要继承ViewGroup类。

    将其他的视图添加到当前容器视图中需要如下几步:

    1.获得当前的容器视图对象。

    2.获得或创建待添加的视图对象。

    3.将相应的视图对象添加到容器视图中。

    代码如下:

    LinearLayout linearLayout_main = (LinearLayout) getLayoutInflater()
    				.inflate(R.layout.activity_main, null);
    setContentView(linearLayout_main);
    LinearLayout linearLayout_secondLayout = (LinearLayout) getLayoutInflater()
    				.inflate(R.layout.activity_second, linearLayout_main);

            其中inflate的方法第一个参数表示XML布局资源文件中的ID,第二个参数表示获得容器视图对象后,要将该对象添加到哪个容器视图对象中。如果不想将获得的容器视图对象添加到任何其他容器中,inflate方法的第二个参数设为null。

            除了上面的添加方式外,也可以使用addView方法向容器视图中添加视图对象,但要将inflate方法的第二个参数值设为null。

    代码如下:

    LinearLayout linearLayout_main = (LinearLayout) getLayoutInflater()
    				.inflate(R.layout.activity_main, null);
    		setContentView(linearLayout_main);
    		LinearLayout linearLayout_second = (LinearLayout) getLayoutInflater()
    				.inflate(R.layout.activity_second, null);
    		linearLayout_main.addView(linearLayout_second);

    注意:以上两种添加方式效果略有不同,如图所示:


    除此之外,还可以完全使用Java代码创建一个视图对象,并将该对象添加到容器视图中,代码如下:

    EditText editText = new EditText(this);
    		linearLayout_main.addView(editText);


    向容器中添加视图对象时需要注意以下几点:

    1. 如果要向容器视图中添加新的视图或进行其他操作,setContentView方法的参数值对应直接使用容器视图对象,而不是布局文件的资源ID,因为这样可以向容器视图对象中添加新的视图。
    2. 一个视图对象只能有一个父视图,也就是说,一个视图对象只能被包含在一个容器视图中。因此,在向容器视图添加其他视图时,不能将XML布局文件中非根节点的视图对象添加到其他的容器视图中。

    展开全文
  • 动态视图分割 动态视图分割 动态视图分割
  • 数据字典视图动态性能视图的区别 : a:数据字典视图名一般用复数,而动态性能视图名一般用单数,比如dba_tablepsaces vs v$tablespace。 b:数据字典视图只有在数据库opn的情况下才可以访问,而部分动态性能视图...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 294,317
精华内容 117,726
关键字:

动态可视图