当前位置:  数据库>oracle
本页文章导读:
    ▪简单演示 Oracle 数据库针对表主键列并发导致行级锁      本文内容 软件环境 简单演示 Oracle 数据库并发导致行级锁 本文简单演示针对表主键并发导致的行级锁。并发是两个以上的用户对同样的数据进行修改(包括插入、删除和修改)。.........
    ▪横表与竖表性能浅析       概念介绍横表概念 横表就是普通的建表方式,每一个字段代表一个KPI指标。举个列子,一个学生的成绩表:学号、数学成绩、语文成绩、英语成绩、物理成绩、化学成绩......如下所示.........
    ▪[原]iBatis.Net(C#)系列三:数据库查询      引用请注明http://www.cnblogs.com/13590/archive/2013/03/14/2958735.html 摘要:查询是数据库SQL语言的核心,本文介绍了通过iBatis.Net对数据库的简单查询、条件查询、动态查询和多表查询。关键词:iBati.........

[1]简单演示 Oracle 数据库针对表主键列并发导致行级锁
    来源:    发布时间: 2013-10-29

本文内容

  • 软件环境
  • 简单演示 Oracle 数据库并发导致行级锁

本文简单演示针对表主键并发导致的行级锁。并发是两个以上的用户对同样的数据进行修改(包括插入、删除和修改)。锁的产生是因为并发。没有并发,就没有锁。并发的产生是因为系统需要,系统需要是因为用户需要。

软件环境

  • Windows 2003 Server
  • Oracle 11g Release 1 (11.1)

简单演示 Oracle 数据库并发导致行级锁

        首先,打开一个会话 session 1,执行如下操作:

SQL> select distinct sid from V$mystat;   SID ---------- 118   SQL> create table t (x int primary key);   表已创建。   SQL> insert into t values(1);   已创建 1 行。   SQL> update t set x=10 where x=1;   已更新 1 行。   SQL>

        先查看本次会话的 SID,然后创建一个表 t,只有一个名为 x 的字段,且该字段为主键,插入一条数据,并更新该数据。

        接下来,打开另一个会话 session 2:

SQL> select distinct sid from V$mystat;   SID ---------- 137   SQL> update t set x=10 where x=1;

        此时,该会话被“卡”在这里不动。只是光标一直在闪……因为,session 2 被 session 1 阻塞。

        现在,查看锁定视图 V$LOCK。

SQL> select sid,type,id1,id2,lmode,request,block 2 from v$lock where sid in (118,137) 3 order by sid;   SID TYPE ID1 ID2 LMODE REQUEST BLOCK ---------- ----- ---------- ---------- ---------- ---------- ---------- 118 TM 128105 0 3 0 0 118 AE 99 0 4 0 0 118 TX 262174 34335 6 0 1 137 TM 128105 0 3 0 0 137 AE 99 0 4 0 0 137 TX 262174 34335 0 6 0   已选择6行。   SQL>

        说明:“TYPE”列表示锁的类型;“LMODE”列表示锁的模式;“ID1”和“ID2”列是锁的相关信息。“REQUEST”列是正在什么锁。

        SID=118 是第一个会话,SID=137 是第二个会话。第三行,第一个会话 BLOCK=1 表示这个会话正在阻塞其他会话,LMODE=6 表示锁的模式,即行级排他锁。第六行,第二个会话 REQUEST=6 表示当前会话正在等待一个 LMODE=6 的锁。注意,第三行和第六行的 ID1 和 ID2 列完全相同。因为它们指向统一资源,只不过一个是资源的拥有者(SID=118),一个是资源的等待者(SID=137)。

        通过这个视图,很容易发现所在——故障定位(trouble shooting)。会话 2 之所以被“卡”住,是因为会话 1 还没提交,而在这张表上,又恰好有要求列值唯一性约束。

        通过 SID 号,查看视图 V$SESSION 就可以确定用户信息。

SQL> select machine from v$session where sid in (118,137);   MACHINE ---------------------------------------------------------------- NUODE\LN NUODE\LN   SQL>

        因为,两个会话是同一台机器,所以名字一样。

本文链接


    
[2]横表与竖表性能浅析
    来源:    发布时间: 2013-10-29

 

概念介绍

横表概念

 

横表就是普通的建表方式,每一个字段代表一个KPI指标。举个列子,一个学生的成绩表:学号、数学成绩、语文成绩、英语成绩、物理成绩、化学成绩......如下所示:

SQL> DESC STUDENT_SCORE
Name Type Nullable Default Comments
---------------- ---------- -------- ------- --------
STUDENT_NO NUMBER(10) 学号
CHINESE_SCORE NUMBER Y 语文成绩
ENGLISH_SCORE NUMBER Y 英语成绩
MATH_SOCRE NUMBER Y 数学成绩
PHYSICAL_SCORE NUMBER Y 物理成绩
SPORTS_SCORE NUMBER Y 体育成绩
CHEMICAL_SCORE NUMBER Y 化学成绩
BIOLOGICAL_SCORE NUMBER Y 生物成绩

竖表概念

 

SQL> DESC STUDENT_SOCRES;
Name Type Nullable Default Comments
------------ ------------ -------- ------- --------
STUDENT_NO NUMBER(10) Y 学号
SUBJECT_CODE VARCHAR2(12) Y 科目编码
SUBJECT_NAME VARCHAR2(12) Y 科目名称
SCORES NUMBER Y 成绩

优劣比较

指标项目

横表

竖表

可扩展性

性能方面

优于竖表

比横表差

业务描述

代码复杂

代码简单

代码复杂,大部分时候需要进行转换

 

横表优点:

1:业务描述:横表的好处是清晰可见,一目了然,数据描叙很清晰。每个字段就是一个KPI指标。

2:性能方面:横表从数据库映射到内存的速度比竖表要快很多。

3:代码复杂:横表不需要做行列转换,代码比较简单

横表缺点:

1:可扩展性:如果需求变更,例如需要增加一个指标,那么就必须修改表结构或重建表。对于需求不明确或变更频繁的情况,横表需要大的改动,涉及改动的脚本也较多。

竖表优点:

1:可扩展性:对于竖表来说,不必修改表结构,只需增加一条记录就可搞定。对于需求不明确或变更频繁的情况,竖表基本不用改动,涉及改动的脚本也较少。

竖表缺点:

1:业务描述:竖表的数据描叙很不清晰,举例说明:学生成绩表的竖表形式,成绩这个字段,即可是数学成绩、也可是语文成绩,不像横表形式数学成绩、语文成绩各成一个字段描述KPI指标来得清晰明了。

2:性能方面:系统展现的报表大部分是横表,这意味着竖表要进行转列。这样需要额外的性能开销。尤其是当报表进行聚合计算时,性能更糟糕。这是因为竖表从数据库映射到内存比横表要慢。

3:代码复杂:需要做行列转换,代码量、复杂性都会增加很多。

实验对比

 

横表STUDENT_SCORE有语文成绩、英语成绩等7个KPI指标,三个学生的三条记录。

SQL> SELECT * FROM STUDENT_SCORE;

STUDENT_NO CHINESE_SCORE ENGLISH_SCORE MATH_SOCRE PHYSICAL_SCORE SPORTS_SCORE CHEMICAL_SCORE BIOLOGICAL_SCORE
----------- ------------- ------------- ---------- -------------- ------------ -------------- ----------------
10001 87.4 63 92 86 75 85 89
10002 91 89 98 62 76 82 73
10006 74 63 57 42 76 59 67

对应于竖表,这三个学生的7个KPI指标需要21条记录才能描述清楚。

SQL> SELECT * FROM STUDENT_SOCRES;

STUDENT_NO SUBJECT_CODE SUBJECT_NAME SCORES
----------- ------------ ------------ ----------
10001 CH 语文成绩 87.4
10001 EG 英语成绩 63
10001 MT 数学成绩 92
10001 PH 物理成绩 86
10001 SP 体育成绩 75
10001 CE 化学成绩 85
10001 BI 生物成绩 89
10002 CH 语文成绩 91
10002 EG 英语成绩 89
10002 MT 数学成绩 98
10002 PH 物理成绩
    
[3][原]iBatis.Net(C#)系列三:数据库查询
    来源:    发布时间: 2013-10-29

引用请注明http://www.cnblogs.com/13590/archive/2013/03/14/2958735.html 

摘要:查询是数据库SQL语言的核心,本文介绍了通过iBatis.Net对数据库的简单查询、条件查询、动态查询和多表查询。

关键词:iBatis.Net;动态查询;多表查询;数据映射

查询是数据库SQL语言的核心,SQL语言只提供唯一一个用于数据库查询的语句,即SELECT语句。用于表达SQL查询的SELECT语句是功能最强也是最复杂的SQL语句。而在实际的项目开发过程中,查询占了一个很大的比重,通常衡量一个框架的好坏也很大程度上取决于该框架对查询的灵活性和效率。本节介绍在iBatis.Net中提供的数据库查询方式。

在上节建立的项目文件中新添加Maps/Test3.xml和Test3.aspx项,分别记录XML数据映射信息和相应的程序调用信息。

1、简单查询

获取一个表的内容,如获取DEAN.SYSUSER表的用户信息,XML数据映射配置信息为:

<selectid="SelectSysuser"resultMap="SysuserResult">

SELECT * FROM DEAN.SYSUSER

</select>

调用代码为:

protectedvoid Button1_Click(object sender, EventArgs e)

{

//简单查询

try

{

ISqlMapper mapper = Mapper.Instance(); //得到ISqlMapper实例

IList<iBatisTest.Domain.Sysuser> plist = mapper.QueryForList<iBatisTest.Domain.Sysuser>("Test3Map.SelectSysuser",null);//调用QueryForList方法

if (plist != null && plist.Count > 0)

{

GridView1.DataSource = plist;

GridView1.DataBind();

}

Label1.Text = "简单查询成功";

}

catch (Exception ex)

{

Label1.Text = ex.Message;

}

}

这种查询结果返回的是整张表的所有记录,无需传入查询参数,在调用QueryForList方法时把参数置为null。考虑到系统的效率,在实际开发中,对记录数少的小表才使用。

2、条件查询

根据条件来查询结果,条件可以是一个或者多个。这种方式在实际查询中被广泛使用,是应用最多的一种查询。如根据登录用户名查询该用户信息,数据映射配置信息为:

<selectid="SelectSysuserByUserName

    
最新技术文章:
▪current online redo log缺失后的恢复
▪ORA-600 2662错误解决实例
▪ORA-00600 2662错误解决方法
▪Oracle Hidden Parameter:_allow_resetlogs_corruption
▪Oracle诊断事件列表
▪Oracle 隐含参数 _disable_logging 详解
▪ORA-00600 [2662]错误解决过程
▪Oracle里常见的执行计划
▪Oracle里另外一些典型的执行计划
▪Oracle服务器自动备份
▪Oracle固定SQL的执行计划(一)---SQL Profile
▪Oracle固定SQL的执行计划(二)---SPM
▪同一环境下新建Standby RAC库
linux iis7站长之家
▪Oracle单实例启动多个实例
▪Oracle的PLSQL别名中文出现乱码解决方法
▪ORA-00379: no free buffers available in buffer pool DEFAULT ...
▪RMAN-06023: no backup or copy of datafile 16 found to restor...
▪RMAN还原数据库报错问题解决案例
▪OEL6.8_X86平台部署Oracle 10gR2检测失败问题
▪Oracle 性能优化建议
▪Oracle SQL语句优化心得
▪Oracle慢SQL监控脚本实现
▪Oracle dblink 查询 tns:无法解析指定的连接标识...
▪Red Hat Enterprise Linux 6使用udev配置Oracle ASM总结...
▪Linux6.6及以上版本配置Oracle ASM共享储存-UDEV
▪Oracle 12C 开启数据库归档模式
▪Solairs系统中配置Oracle 12c 开机启动
▪重建DBMS_STATS解决ORA-31626 ORA-21633以及ORA-04063 ORA...
▪Oracle ASMM 与AMM之间相互切换
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,