哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10年DBA工作经验
一位上进心十足的【大数据领域博主】!
中国DBA联盟(ACDU)成员,目前从事DBA及程序编程,B站及腾讯课堂讲师,直播量破10W
擅长主流数据Oracle、MySQL、PG 运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。
✨ 如果有对【数据库】感兴趣的【小可爱】,欢迎关注【IT邦德】
❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️
春节一过,迎来了“金三银四”的招聘旺季,各个大厂开始进入了大面积招兵买马的阶段,
现在正是程序员进入大厂的最佳时期。
你是否有心仪的大厂想要跳槽呢?趁着这个黄金阶段把握机会,一举进入大厂吧。
大厂面试无外乎看三点,简历、笔试和面试。
其中一些知名的大厂在笔试的时候最爱考察大数据方面的技能
结构化查询语言(Structured Query Language)简称SQL,是一种数据库查询语言。
作用:用于存取数据、查询、更新和管理关系数据库系统。
第一范式:每个列都不可以再拆分。
第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。
第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键。
在设计数据库结构的时候,要尽量遵守三范式,如果不遵守,必须有足够的理由。比如性能。
事实上我们经常会为了性能而妥协数据库的设计。
原子性:事务是最小的执行单位,不允许分割。
事务的原子性确保动作要么全部完成,要么完全不起作用;
一致性:执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的;
隔离性:并发访问数据库时,一个用户的事务不被其他事务所干扰,
各并发事务之间数据库是独立的;
持久性:一个事务被提交之后。它对数据库中数据的改变是持久的,
即使数据库发生故障也不应该对其有任何影响。
死锁是指两个或多个事务在同一资源上相互占用,
并请求锁定对方的资源,从而导致恶性循环的现象。
常见的解决死锁的方法
1、如果不同程序会并发存取多个表,
尽量约定以相同的顺序访问表,可以大大降低死锁机会。
2、在同一个事务中,尽可能做到一次锁定所需要的所有资源,减少死锁产生概率;
3、对于非常容易产生死锁的业务部分,可以尝试使用升级锁定颗粒度,
通过表级锁定来减少死锁产生的概率;
如果业务处理不好可以用分布式事务锁或者使用乐观锁
存储过程是一个预编译的SQL语句,优点是允许模块化的设计,
就是说只需要创建一次,以后在该程序中就可以调用多次。
如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。
优点
1)存储过程是预编译过的,执行效率高。
2)存储过程的代码直接存放于数据库中,通过存储过程名直接调用,减少网络通讯。
3)安全性高,执行存储过程需要有一定权限的用户。
4)存储过程可以重复使用,减少数据库开发人员的工作量。
缺点
1)调试麻烦,但是用 PL/SQL Developer 调试很方便!弥补这个缺点。
2)移植问题,数据库端代码当然是与数据库相关的。
但是如果是做工程型项目,基本不存在移植问题。
3)重新编译问题,因为后端代码是运行前编译的,
如果带有引用关系的对象发生改变时,受影响的存储过程、
包将需要重新编译(不过也可以设置成运行时刻自动编译)。
4)如果在一个程序系统中大量的使用存储过程,
到程序交付使用的时候随着用户需求的增加会导致数据结构的变化,
接着就是系统的相关问题了,
最后如果用户想维护该系统可以说是很难很难、而且代价是空前的,维护起来更麻烦。
数据定义语言DDL(Data Ddefinition Language)CREATE,DROP,ALTER
主要为以上操作 即对逻辑结构等有操作的,
其中包括表结构,视图和索引。
数据查询语言DQL(Data Query Language)SELECT
这个较为好理解 即查询操作,以select关键字。
各种简单查询,连接查询等 都属于DQL。
数据操纵语言DML(Data Manipulation Language)INSERT,UPDATE,DELETE
主要为以上操作 即对数据进行操作的,
对应上面所说的查询操作 DQL与DML共同构建了多数初级程序员常用的增删改查操作。
而查询是较为特殊的一种 被划分到DQL中。
数据控制功能DCL(Data Control Language)GRANT,REVOKE,COMMIT,ROLLBACK
主要为以上操作 即对数据库安全性完整性等有操作的,可以简单的理解为权限控制等。
交叉连接(CROSS JOIN)
内连接(INNER JOIN)
外连接(LEFT JOIN/RIGHT JOIN)
联合查询(UNION与UNION ALL)
全连接(FULL JOIN)
交叉连接(CROSS JOIN)
优化shema、sql语句+索引;
第二加缓存,memcached, redis;
主从复制,读写分离;
垂直拆分,根据你模块的耦合度,
将一个大的系统分为多个小的系统,也就是分布式系统;
水平切分
分库分表就是为了 解决由于数据量过大而导致数据库性能降低的问题,
将原来独立的数据库拆分成若干数据库组成,将数据大表拆分成若干数据表组成,
使得单一数据库、单一数据表的数据量变小,从而达到提升数据库性能的目的。
在主库上把数据更高记录到二进制日志
从库将主库的日志复制到自己的中继日志
从库读取中继日志的事件,将其重放到从库数据中
TID(Global Transaction ID,全局事务ID)是全局事务标识符,
是一个已提交事务的编号,并且是一个全局唯一的编号。
GTID是从MySQL 5.6版本开始在主从复制方面推出的重量级特性。
GTID实际上是由UUID+TID组成的。其中UUID是一个MySQL实例的唯一标识。
GTID代表了该实例上已经提交的事务数量,并且随着事务提交单调递增。
GTID有如下几点作用:
① 根据GTID可以知道事务最初是在哪个实例上提交的。
② GTID的存在方便了Replication的Failover。
因为不用像传统模式复制那样去找master_log_file和master_log_pos。
③ 基于GTID搭建主从复制更加简单,
确保每个事务只会被执行一次。
AWR(Automatic Workload Repository,自动负载信息库)
是Oracle 10g引入的一个重要组件。
在AWR里面存储着近一段时间内(Oracle 10g默认是7天,Oracle 11g及其之后的版本默认是8天)
数据库活动状态的详细信息。
Oracle监听器是一个服务器端程序,
于监听所有来自客户端的请求,并为其提供数据库服务。
请参考博客:https://blog.csdn.net/weixin_41645135/article/details/119966461
主库丢失归档DG故障处理的全过程
DG逻辑备库无法同步日志报错ORA-01658处理
DG的failover后如何切换
OGG REPA进程 Error ORA-01031报错处理
OGG启动报错OGG-00014处理
Mysql root密码忘记,如何找回?
Linux7部署 Mysql初始化报错GLIBC_2.28处理
Windows Installer未启动导致Mysql服务卡死处理
Windows安装Mysql,服务无法启动,错误1053处理
Mysql输出中文显示乱码处理
磁盘块爆了,如何删除MySQL binlog日志?
取决磁盘容量大小和mysql参数设置;
show variables like ‘%expire_logs_days%’;
默认是0,即永不过期
可以通过设置参数全局参数或者启动参数进行修改:
set global expire_logs_days=30;
配置文件添加;
expire_logs_days = 30(iPhone Mini)
Oracle RAC集群安装,从零开始
Linux环境Oracle安装大全,呕心狂敲万字
Oracle高可用DG详细配置方法及步骤
MySQL的各种安装方式都给你
MySQL主从复制高可用搭建
Linux源码安装PostgreSQL
熬夜爆肝总结Liunx环境源码安装Redis
Windows 下安装Redis
庖丁解牛,MySQL执行计划Explain的2大核心
程序员放弃写代码,直接用SQL写逻辑,你废吗?
Oracle执行计划查看宝典,超实用
白亿条数据量的Oracle数据库如何优化?
大家点赞、收藏、关注、评论啦 微信公众号