【应用 业务】做数据库技术支持的一点感悟

简介:

想不出什么好标题,也不想做什么标题党。说说今天工作中遇到的问题吧!先总结一句:了解应用的DBA才是一名合格的DBA!
开发人员要求解决一条SQL 语句问题。即过滤自身,比如
id
1
2
3
4
点id=1的那行,显示id in (2,3,4)的就对了
起初以为很简单,写了一条大致如下:
select * from t where not exists
(select 1 from t t1 where t1.id=:id
 and t.id=t1.id)
这个是测试的语句,一个是笛卡尔乘积,一个是关联查询。严格的说要有性能上的考量().
SELECT
    a.pk_equipdaliy,a.vbillstatus
FROM
    ycam_equipdaliy a ,
    ycam_equipdaliy b
WHERE
    b.vbillstatus = 1
    -- AND COALESCE (dr, 0) = 0
    --AND a.pk_equipdaliy!=b.pk_equipdaliy
    and a.pk_equipdaliy     AND a.vbillstatus= 1.pk_equipdaliy

SELECT
    a.pk_equipdaliy, a.vbillstatus
FROM
    ycam_equipdaliy a
WHERE
    -- AND COALESCE (dr, 0) = 0
   a.pk_equipdaliy  in
    (
        SELECT
           b.pk_equipdaliy
        FROM
           ycam_equipdaliy b
        WHERE
           b.vbillstatus = 1
           AND a.pk_equipdaliy !=b.pk_equipdaliy
    )
AND  a.vbillstatus = 1
  两条在数据库里面跑时,都能得到正确的结果,但是当写到应用层,由java代码调用时,结果却一直报错。
       判断sql本身没有问题,在开发执行调试状态时,同时在执行上述sql 语句时,发现表被锁住了。于是一步一步调试,调试到执行sql获取结果集时,问题出现了,sql语句所查询的表的一个字段 vbillstatus被修改由原来的3变为1。导致执行上述sql时,数据一致性遭到了破坏。于是梳理业务应用和业务逻辑。底层的代码的确在 “审核” 这一步,就把字段值修改了!最后只能通过应用程序而不是sql语句来解决问题。
   总结一下:天花了半天的时间来处理这个问题,最终解决了!对于数据库技术上没有什么收获,但是感悟是:作为一个行业软件的服务供应商的数据库技术支持,一定要了解应用,了解业务流程。这样才能准确而快速的定位问题的所在,进而更快的解决数据库问题。

附上盖国强大师对DBA 七点建议:

1.实时监控数据库告警日志
这是必须进行的工作,并且应该根据不同的严重级别,发送不同级别的告警,及时了解数据库的变化与告警。

2.实时监控数据库的重要统计信息
实施监控对于数据库运行至关重要、能够表征数据库重要变化的统计信息,并且据此发送报警信息。那么应当监控哪些统计信息呢?大家可以思考一下,对于单机、RAC环境各不相同。

3.部署自动的Statspack/AWR报告生成机制
每天检查前日的AWR报告,熟悉数据库的运行状况,做到对于数据库了如指掌

4.每天至少优化和熟悉一个Top SQL
根据AWR或Statspack报告,每天至少了解或熟悉一个Top SQL,能优化的要提出优化和调整建议

5.部署完善的监控和数据采样系统
DBA应该对数据库部署完善的监控系统,并对重要信息进行采样,能够实时或定期生成数据库重要指标的曲线图,展现数据库的运行趋势。

6.全面深入的了解应用架构
不了解应用的DBA是没有前途的DBA,对应用了解不深入的DBA算不上Expert,所以一定要深入了解应用。

7.撰写系统架构、现状、调整备忘录
根据对数据库的研究和了解,不断记录数据库的状况,撰写数据库架构、现状及调整备忘录,不放过任何可能的优化与改进的机会。

相关文章
|
2月前
|
存储 Oracle 关系型数据库
Oracle数据库的应用场景有哪些?
【10月更文挑战第15天】Oracle数据库的应用场景有哪些?
175 64
|
20天前
|
缓存 NoSQL 数据库
运用云数据库 Tair 构建缓存为应用提速,完成任务得苹果音响、充电套装等好礼!
本活动将带大家了解云数据库 Tair(兼容 Redis),通过体验构建缓存以提速应用,完成任务,即可领取罗马仕安卓充电套装,限量1000个,先到先得。邀请好友共同参与活动,还可赢取苹果 HomePod mini、小米蓝牙耳机等精美好礼!
|
27天前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
41 3
|
27天前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
51 2
|
2月前
|
XML 存储 数据库
XML在数据库中有哪些应用?
【10月更文挑战第17天】XML在数据库中有哪些应用?
39 2
|
2月前
|
供应链 数据库
数据库事务安全性控制有什么应用场景吗
【10月更文挑战第15天】数据库事务安全性控制有什么应用场景吗
|
2月前
|
SQL 数据库 数据库管理
数据库SQL函数应用技巧与方法
在数据库管理中,SQL函数是处理和分析数据的强大工具
|
17天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
32 1
|
19天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
33 4
|
26天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
141 1