做好性能测试需要了解的知识汇总 性能测试
1. 如何理解TPS?
2. 如何理解线程调用?
3. 如何理解响应时间?
4. 如何理解性能建模?(可分类回答)
5. 如何理解响应时间、TPS曲线和用户之间的关系?
6. 在LoadRunner中为什么要设置思考时间和pacing?
应用服务器
1. 如何理解J2EE的系统架构?
2. 如何理解J2EE应用服务器的容器?
3. 如何理解内存泄露?如何定位JAVA类的应用的内存泄露?如何定位C语言编写的应用的内存泄露?
4. 如果用纯JAVA的应用调用J2EE应用服务器的容器资源会出现什么结果?需要如何维护容器资源?(说明原理即可)
5. 如何定位JAVA的方法调用消耗的时间?(不通过在源代码中加时间戳的方式)?
6. 如何定位C语言中的函数调用消耗的时间?
7. 如何监控J2EE应用服务器?(可以用一个具体的应用服务器做例子)
数据库
1. 如何理解数据库架构?(可以用一个数据库做例子)
2. SQL语句在数据库中的执行分成几步,每一步都做什么?(可以用一个数据库做例子)
3. 如何跟踪SQL的执行时间和内存的消耗?(可以用一个数据库做例子)
4. 如何监控数据库?监控能得到什么数据?(可以用一个数据库做例子)
5. 如何定位死锁问题?如何定位热块问题?如何监控日志切换?(可以用一个数据库做例子)
6. 有几种手段可以改变执行计划?(可以用一个数据库做例子)
操作系统
1. 如何判断CPU、内存、磁盘的瓶颈?
2. 如何理解CPU、内存、磁盘之间的关系?
3. 如何理解paging in/paging out?
4. 如何监控操作系统的资源?(可以用一个操作系统做例子)
5. 如何理解内存管理和线程调度?(可以用一个操作系统做例子)
6. 如何理解CSwitch?(可以用一个操作系统做例子)
7. 如何理解磁盘IO?(可以用一个操作系统做例子)
网络
1. 如何定位数据包的传输在网络上消耗的时间?
2. 如何理解纯路由和NAT的区别?
性能测试工具
1. 解释LoadRunner的工作原理。
2. 如何理解LoadRunner里的关联?
3. 如何理解性能压力工具?
4. 如何理解虚拟用户?(可以用一个工具做例子)
5. 如果理解业务到脚本的转化?(可以用一个工具做例子)
6. 如何做到业务统计数据到场景的转化?(可以用一个工具做例子)
最新内容请见作者的GitHub页:http://qaseven.github.io/
文章
监控 · Java · 测试技术 · 数据库 · 容器 · 应用服务中间件 · 开发框架 · C语言 · SQL · 调度
2017-07-04
SQL Server DBA 30问 【itpub】
很多开发人员都想成为一名数据库培训,也有很多人一开始就把自己定位成为一名DBA,DBA究竟需要掌握些什么知识和技能呢?以下是我
做DBA工作和面试DBA时,整理的一些DBA方面的三十个问题,三十个大问题中还有许多小的问题,涵括了SQL Server 2008 R2培训比较多的技术知识点,与大家分享下,希望给有志做DBA的朋友们一些帮助:
1. char、varchar、nvarchar之间的区别(包括用途和空间占用);xml类型查找某个节点的数据有哪些方法,哪个效率高;使用存储
过程和使用T-SQL查询数据有啥不一样;
2. 系统DB有哪些,都有什么作用,需不需要做备份,为什么;损坏了如何做还原(主要是master库);
3. 有哪些操作会使用到TempDB;如果TempDB异常变大,可能的原因是什么,该如何处理;
4. Index有哪些类型,它们的区别和实现原理是什么,索引有啥优点和缺点;如何为SQL语句创建合适的索引,索引创建时有哪些需要注意的项,如何查看你创建的索引是否被使用;如何维护索引;索引损坏如何检查,怎么修复;T-SQL有更好的索引存在,但是运行时并没有使用该索引,原因可能是什么;
5. 视图上我们能建索引吗,如果能建的话,会啥好处和坏处;视图上建索引和表上建索引有啥区别;
6. Job信息我们可以通过哪些表获取;系统正在运行的语句可以通过哪些视图获取;如何获取某个T-SQL语句的IO、Time等信息;
7. 在线系统,一个表有五千万记录,现在要你将其中的两千万条记录导入到另一台服务器的某个表中,导完后,需要将这两千万数据删除,你预备如何处理,优缺点是什么;
8. 数据库服务器报磁盘空间不足,你将如何应对,要求尽快恢复;
9. 临时表、表变量、CTE(公用表表达式)有啥区别和联系,保存位置有啥不一样,使用时如何决定选哪种;
10. SQLServer有哪些隔离级别,默认级别是哪个;数据库有哪些主要的锁类型;行版本控制是如何实现的;
11. 死锁如何跟踪;阻塞如何跟踪和查找;发现有问题的语句后,如何进行处理;用Profile做跟踪时,一般我们需要跟踪哪些事件;
12. Windows日志主要有哪几种,SQL Server培训日志一般保留几个,什么情况下会产生新的SQL日志;数据库日志恢复模式有哪几种,区别是什么;数据库日志突然变得很大,而且你无法收缩,可能的原因是什么,怎么查找原因,分别将如何处理;
13. 分区表和分区视图是什么概念,一般是在什么情况下使用,有啥好处;
14. 如何比较两个同结构的表数据的差异;如果表损坏了,如何修复;如何在备份文件有问题的情况下尽量还原数据;如何将一个表的Identity属性归零;
15. CheckPoint和LazyWriter区别;DDL Trigger 和 DML Trigger有啥用,区别是啥;
16. Mirroring 和Logshipping 的区别和使用场景;SQLServer的Mirroring与Oracle的哪像技术比较接近,它们的区别是啥;
17. Mirroring的搭建步骤,Mirroring三种模式区别,Mirroring 中同步和异步的原理和要求,搭建了Mirroring后,需要对数据库日志做什么处理;
18. Replication配置和使用场景;Replication有哪几种模式;PUSH和PULL有啥区别;搭建Replication后会产生一个什么库;报错时用什么来查看报错的具体语句,清理掉某个库的Replication使用什么语句,查看同步链信息主要通过哪些表;
19. Replication发布端的表能truncate吗,为什么;Replication Identity列如何处理、缺失字段错误如何处理、主键冲突错误如何处理、如何跳过指定的错误、订阅端表被删除了如何处理、大规模改动数据如何处理;某条同步链因为其中的某个表一次性改动数据很大造成同步链的严重延时,要求尽快恢复同步链,如何处理。
20. SSB(Service Broker)使用场景,如何创建,都会创建些什么对象,有啥优缺点,主要通过什么方式实现不同服务器之间的消息传递;可以通过哪些方式排错;
21. 跟踪数据库数据的变更有哪些方法,它们(CDC(Change Data Capture)、CT(Change Tracking)、Trigger等)使用上的优缺点;
22. SQL调优步骤,如何来判断SQL语句存在问题,怎么定位问题,如何解决这些问题;
23. 数据库故障排查步骤,如何处理紧急数据库问题;
24. 如何考虑和制定数据库备份计划;公司要求对一个非常大的数据库或者表做备份,而且要求数据量尽可能少丢失,你可能会采用什么方法;
25. 如果要你做数据库监控,你会关注那些指标(包括SQLServer和OCP培训),如何制定性能基线,你使用过哪些监控软件;
26. 数据库迁移步骤;重建一套比较大的测试系统(最少10个数据库实例),如果原来DB数据量都不大,但DB比较多,新搭建的系统数据都不需要,如何快速实现;
27. 创建Cluster 简要步骤,最少需要几个IP,需要安装些什么服务,需要哪些固定的磁盘,Raid如何设置,磁盘如何划分;SQLServerCluster与Mysql Cluster 和 Oracle RAC的区别等;
28. 如果遇到一个性能不理想、代码复杂的存储过程,很难通过数据库方面的调优来解决问题,你如何说服开发人员修改它(可能开发人员并不愿意修改);
29. 你有没有遇到过因为你的误操作造成系统故障发生的情况,你当时是如何处理的;如果没有,假定你误删了一个重要的表,你该如何处理;
30. 你准备成为一名什么样的DBA培训,为此你将如何准备(或者你有怎样的职业规划,准备怎样度过你的DBA生涯);如果你进入公司,你最想获得的是什么。
文章
SQL · 监控 · 数据库 · 数据库管理 · 索引 · 关系型数据库 · Oracle · 存储 · 运维 · Windows
2011-11-11
SQL Server DBA三十问
很多开发人员都想成为一名DBA,也有很多人一开始就把自己定位成为一名DBA,DBA究竟需要掌握些什么知识和技能呢?以下是我做DBA工作和面试DBA时,整理的一些DBA方面的三十个问题,三十个大问题中还有许多小的问题,涵括了SQLServer DBA比较多的技术知识点,与大家分享下,希望给有志做DBA的朋友们一些帮助:
1、char、varchar、nvarchar之间的区别(包括用途和空间占用);xml类型查找某个节点的数据有哪些方法,哪个效率高;使用存储过程和使用T-SQL查询数据有啥不一样;
2、系统DB有哪些,都有什么作用,需不需要做备份,为什么;损坏了如何做还原(主要是master库);
3、有哪些操作会使用到TempDB;如果TempDB异常变大,可能的原因是什么,该如何处理;
4、Index有哪些类型,它们的区别和实现原理是什么,索引有啥优点和缺点;如何为SQL语句创建合适的索引,索引创建时有哪些需要注意的项,如何查看你创建的索引是否被使用;如何维护索引;索引损坏如何检查,怎么修复;T-SQL有更好的索引存在,但是运行时并没有使用该索引,原因可能是什么;
5、视图上我们能建索引吗,如果能建的话,会啥好处和坏处;视图上建索引和表上建索引有啥区别;
6、Job信息我们可以通过哪些表获取;系统正在运行的语句可以通过哪些视图获取;如何获取某个T-SQL语句的IO、Time等信息;
7、在线系统,一个表有五千万记录,现在要你将其中的两千万条记录导入到另一台服务器的某个表中,导完后,需要将这两千万数据删除,你预备如何处理,优缺点是什么;
8、数据库服务器报磁盘空间不足,你将如何应对,要求尽快恢复;
9、临时表、表变量、CTE(公用表表达式)有啥区别和联系,保存位置有啥不一样,使用时如何决定选哪种;
10、SQLServer有哪些隔离级别,默认级别是哪个;数据库有哪些主要的锁类型;行版本控制是如何实现的;
11、死锁如何跟踪;阻塞如何跟踪和查找;发现有问题的语句后,如何进行处理;用Profile做跟踪时,一般我们需要跟踪哪些事件;
12、Windows日志主要有哪几种,SQLServer日志一般保留几个,什么情况下会产生新的SQL日志;数据库日志恢复模式有哪几种,区别是什么;数据库日志突然变得很大,而且你无法收缩,可能的原因是什么,怎么查找原因,分别将如何处理;
13、分区表和分区视图是什么概念,一般是在什么情况下使用,有啥好处;
14、如何比较两个同结构的表数据的差异;如果表损坏了,如何修复;如何在备份文件有问题的情况下尽量还原数据;如何将一个表的Identity属性归零;
15、CheckPoint和LazyWriter区别;DDL Trigger 和 DML Trigger有啥用,区别是啥;
16、Mirroring 和Logshipping 的区别和使用场景;SQLServer的Mirroring与Oracle的哪像技术比较接近,它们的区别是啥;
17、Mirroring的搭建步骤,Mirroring三种模式区别,Mirroring 中同步和异步的原理和要求,搭建了Mirroring后,需要对数据库日志做什么处理;
18、Replication配置和使用场景;Replication有哪几种模式;PUSH和PULL有啥区别;搭建Replication后会产生一个什么库;报错时用什么来查看报错的具体语句,清理掉某个库的Replication使用什么语句,查看同步链信息主要通过哪些表; 19、Replication发布端的表能truncate吗,为什么;Replication Identity列如何处理、缺失字段错误如何处理、主键冲突错误如何处理、如何跳过指定的错误、订阅端表被删除了如何处理、大规模改动数据如何处理;某条同步链因为其中的某个表一次性改动数据很大造成同步链的严重延时,要求尽快恢复同步链,如何处理。 20、SSB(Service Broker)使用场景,如何创建,都会创建些什么对象,有啥优缺点,主要通过什么方式实现不同服务器之间的消息传递;可以通过哪些方式排错; 21、跟踪数据库数据的变更有哪些方法,它们(CDC(Change Data Capture)、CT(Change Tracking)、Trigger等)使用上的优缺点; 22、SQL调优步骤,如何来判断SQL语句存在问题,怎么定位问题,如何解决这些问题; 23、数据库故障排查步骤,如何处理紧急数据库问题; 24、如何考虑和制定数据库备份计划;公司要求对一个非常大的数据库或者表做备份,而且要求数据量尽可能少丢失,你可能会采用什么方法; 25、如果要你做数据库监控,你会关注那些指标(包括SQLServer和Windows),如何制定性能基线,你使用过哪些监控软件; 26、数据库迁移步骤;重建一套比较大的测试系统(最少10个数据库实例),如果原来DB数据量都不大,但DB比较多,新搭建的系统数据都不需要,如何快速实现; 27、创建Cluster 简要步骤,最少需要几个IP,需要安装些什么服务,需要哪些固定的磁盘,Raid如何设置,磁盘如何划分;SQLServerCluster与Mysql Cluster 和 Oracle RAC的区别等; 28、如果遇到一个性能不理想、代码复杂的存储过程,很难通过数据库方面的调优来解决问题,你如何说服开发人员修改它(可能开发人员并不愿意修改); 29、你有没有遇到过因为你的误操作造成系统故障发生的情况,你当时是如何处理的;如果没有,假定你误删了一个重要的表,你该如何处理; 30、你准备成为一名什么样的DBA,为此你将如何准备(或者你有怎样的职业规划,准备怎样度过你的DBA生涯);如果你进入公司,你最想获得的是什么。
本文出自seven的测试人生公众号最新内容请见作者的GitHub页:http://qaseven.github.io/
文章
SQL · 监控 · 数据库 · 数据库管理 · 索引 · 关系型数据库 · Oracle · Windows · 存储 · 运维
2017-07-03
共同探索企业级数据库架构之道路
2018云栖大会南京峰会企业级互联网架构专场,阿里巴巴高级数据架构师黄欢欢带来题为企业级数据架构探索之路的演讲。主要从企业数据库的发展现状、存在的问题以及企业级架构的需求开始谈起,针对其存在的问题提出了对应的解决方案,最后对企业级产品的架构以及满足企业及架构的需求问题做了详细的分析。数十款阿里云产品限时折扣中,赶快点击这里,领券开始云上实践吧!直播视频请点击以下为精彩视频及ppt内容整理:
企业数据库现状
说起企业级数据库架构体系,在2010年阿里巴巴还没有一个完整的数据库架构体系且存在着很多问题,问题大致可以分为一下几点:
业务快速发展,如何才能做到弹性扩展、且性能满足要求:单体的IOE架构已经不能满足业务快速发展的需求,所以需要我们去做弹性的扩展,也就是既可以弹性扩容也可以弹性缩容的。
数据是最重要的资产,但数据孤岛却是现状:现如今应用都在做服务化,应用做服务话以后在每个地方都存在自己的数据,那么数据之间是如何流通的呢?以及怎样避免数据孤岛等问题值得思考。
稳定和高可用,已经成为企业数据库系统的最大挑战:对于企业级来说,这是一个普遍的问题,数据库的稳定性、高可用性是企业级数据库最基础的一个功能。
业务的多样化,单一的数据存储无法有效满足需求:我们发现业务正逐渐的多元化,单一的数据库已经不能很好的满足业务发展的需求,那么我们在统一化的支撑和个性化的支持下如何做权衡也是我们要考虑的问题。
研究人员众多,数据安全、效率、规范的挑战很大。
企业级架构的基本诉求
结合以上问题,总结了企业及数据库的一些基本诉求:
1)可扩展性:可扩展性与容量的扩展并不完全相同,更多指的是架构上的可扩展以及弹性的需求。2)稳定可靠:系统的稳定性和高可用。3)高效:可分为两层含义理解,首先企业级架构数据库之后,我们如何高效地、自动地去运维数据库;其次,研发的人员越来越多,如何利用自己的平台去提升研发效率是我们需要考虑的问题。4)安全:数据安全是企业的生命线,安全问题绝不能够在出现问题之后再去考虑安全问题。如何提升系统的扩展性
提升系统扩展性或者提升系统的容量有很多方法,比如可以去做Scale Up,也可以升级数据库版本以及数据库硬件的配置,但是这是有限的。所以要进一步结合业务做一些垂直拆分,例如应用做服务化,那么商品的应用、交易的应用或者库存的应用需要拆开来,其对应的数据库也需要拆开来,这样做垂直拆分以后,对于单个应用来说我们需要做更进一步的扩展性,慢慢我们发现会遇到瓶颈,尤其是在写上面的扩展性。这时就需要做Scale Out,也就是说水平拆分线性的扩展。需要注意的是水平拆分的线性扩展不是一次性的,对系统进行扩展以后需要对弹性的缩容。
Scale Out解决方案
利用DRDS进行水平拆分,线性扩展:
弹性的扩容能力
超高性能,满足业务极致需求Scale Out解决方案现在最成熟的技术就是分库分表的解决方案,当一张物理库或一张物理表已支撑不了业务写入的时候,我们就对它按照不同的维度去做水平的分库分表拆分。DRDS所做的事情就是在分库分表表的基础上,把它揉合成逻辑库和逻辑表的概念,其优势在于进行分库分表后,对于用户来说看到是还是一张逻辑库或逻辑表。
弹性扩展解决方案
利用云上计算资源,轻松应对业务高峰
按需使用云资源,高峰结束后快速释放
一站式服务,简单易用SDM混合数据管控所做的事情就是实现一键的数据库弹到云上去,之后做一个云上与云下混合的数据库,通过统一的管控平台,对云上的和云下的数据库进行统一的管理。
如何保证系统的稳定可靠
提供多种数据库容灾方案:考量:RPO,RTO,成本,扩展性。
覆盖数据库容灾的各种需求:容灾建设,监控,容灾演练,容灾切换,数据校验及修复。
构建数据库异地容灾的完整体系多层级高可用方案:
1)备份上传:采用单点写入方式,RPO为最后一次成功上传的备份的时间点到崩溃时间,RTO为小时级甚至天级,通过常规的数据库备份,将备份集上传至云端OSS存储。2)DBS备份上云:采用单点写入方式,RPO为秒级,RTO为小时级,通过捕获数据库变化日志持续将数据库增量备份到云端,保有数据库最新的数据。3)单向实时同步:采用单店写入方式,RPO为小于1秒,RTO为秒级到分钟级,其特点在于持续增量同步数据变化到容灾端数据库,容灾端数据库为读写打开状态,但逻辑上不接受应用写入。4)异地多活:采用多点写入方式,RPO为小于1秒,RTO仅应用流量切换时间,多活架构,数据多点写入,数据变化双向复制。需要做多点间数据写入的隔离,防止记录在多点被更新。对于现在阿里的数据库架构来说四种方案均能够支持,并且主要采用异地多活的方案。对于前面所提到的应用做了服务化这个问题,一些数据是需要依赖其他数据的,这时候如何实现数据之间的相互实时流转,且满足业务需求的,这时候就需要数据同步来实现。
让数据成为架构的动脉
针对数据自由流转这个问题,列举了几个典型的实践案例:1)上云迁移:(同异构)数据在云上和云下自由流转。2)在离线:在线的数据库同步到离线,进行实时分析。3)多活同步:单元之间的实时双向同步,满足异地容灾需求。4)下游消费:通过订阅实时增量消息,满足搜索等下游业务。5)实时大屏:在线数据,流经实时计算,大屏展示。
兼顾数据安全和效率
保证数据安全的前提下,怎样保证效率是每个研发者所要考虑的问题,DBA已经成为瓶颈。我们所做出的解决方案是通过DMS企业版平台,此平台主要解决两个问题,第一个就是研发效率的问题,让研发者对数据库的操作不在成为瓶颈;第二个问题就是数据安全问题,我们会对权限进行非常精细以及明确的管控,我们对权限定义的力度可以细化到某一个库、某一个表或某一个列的程度。接下来简单介绍下DMS数据库平台,现如今数据库类型众多,但DMS平台支持多种数据库类型,在数据库控制层之上有一个安全控制层,也就是前面所提到的数据安全。若没有数据安全,我们会遭受很多风险与挑战。此外还有核心功能层,面向研发时对数据库的操作全部通过自助的方式来实现,用户则更多的是面向研发同学、运营以及后台同学来看的。
在解决数据安全和效率的问题之后,我们还面临着另一个问题,即业务个性化的权衡问题,对于数据库的管理人员来说,更希望一个数据库能够支撑所有的业务,在统一化、规模化运维的时候是最方便的。但实际上业务需求是很多元化的,这时一种数据库就很可能无法包含整个业务。例如淘宝上有上千个应用,有些文档型的应用结构定义常常会发生变化,又比如有一些IOT的用户,在IOT场景下很多时候是偏向时序的分析,时序数据分析的时候或日记类的数据分析的时候我们把这些数据放到哪里呢?为了解决这些问题我们提供了多种数据库引擎,如下图显示。
虽然提供了很多数据库类引擎,但是在统一运维上面也并没有做太多的妥协,数据库引擎众多,但数据库中台是能够很好的包容这些产品的。产品总结
为了满足企业架构的需求,我们采用分布式数据库Scale Out实现弹性扩展,此外还有多样化存储引擎满足业务需求,让每个数据库都能发挥它最大的作用;同时通过数据流转,打通任督二脉;以及多层级的容灾保证系统高可用性,提出了高效的数据库DevOps和数据安全方案。本文由云栖志愿小组毛鹤整理编辑
文章
运维 · 容灾 · 安全 · 数据库 · 数据库管理
2018-05-14
开发人员面试题目分享(来看看不一样的面试题吧)
第一题:
现需通过网页批量导入一万个人力数据到系统中,且每项数据都要做格式化处理才能入库,在保证数据准确、完整的前提下,要求在网页上显示导入任务的执行进度,该如何实现
第二题:
现需通过网页批量导入一万个人力数据到系统中,且每项数据都要做格式化处理才能入库,在保证数据准确、完整的前提下,要求把导入时间缩短一半,该如何实现
第三题:
假设多个用户同时访问一个网页,这些用户可以触发该网页上一项耗时较长的后台任务,现要求这些用户的任务排队依次执行,该如何实现
第四题:
现需要写一个操作系统服务,来循环执行某项任务,该任务每个小时执行一次,任务耗时可能会超过一个小时,要完成此工作需要注意哪些内容
第五题:
当系统管理员删除掉一个用户的同时,这个用户很可能正在查看系统的敏感信息,管理员往往希望在删除一个用户的时候,如果这个用户在线,则“尽快”把他“踢”下线,请问如何实现这个功能?
第六题:
假设一个B/S结构的系统拥有一万个用户,从现在开始,要求每个用户登录成功12个小时之后,处理一项复杂的耗时任务,(从用户登录成功开始计时,12个小时计时结束之后,马上处理任务)该如何实现?
第七题:
在开发需要多人协作的系统时,往往会使用多个数据库:开发库,测试库,生产库;那么这三个数据库间的数据库表结构同步就将成为一个问题,比如:开发者A在“开发库”中添加了一个表,开发者B修改了一个表,这些数据库结构的变更势必要同步到测试库和生产库中去,请如何便捷、高效、不易出错的方式处理此问题?
第八题:
数据库事务能有效的保证数据的完整性,然而却比较消耗系统资源。在需要应对高并发的应用系统中,往往都会尽量少的使用数据库事务,请问针对某一张表的数据,如何做到不使用数据库事务,又能保证数据的完整性
其中有几道题目是alexqiu分享给我的,表示感谢!
分库后如何高效的做分页
现在连接6台mysql数据库,路由分库算法是根据id的hash值%6,根据值不同分别存入6台数据库。现在不知道如何做分页查询列表?
先决原则:
数据分库时尽量选择索引字段,最好此字段还是唯一的。
数据分库时建表时结合业务,选择where后查询比较频繁的字段。
解决方案泛泛之谈:
1、直接使用跨库的多表联合查询。
不建议。
2、向6台数据库server均发送一个查询请求,然后对所有查询结果进行汇总,再处理分页逻辑。
时间换空间。取20条有序数据,6台服务器各取20条,汇总排序返回。
3、建立一个总数据库,只负责维护主键和必要的索引,以供分页查询。
耦合业务,需要统计哪些sql需要维护哪些表的哪些字段。
可能会有冗余数据产生,需要同步冗余数据开销。
4、找一些靠谱的中间件,对内部实现封装,对外部实现透明。
譬如阿里的中间件,mycat等,不过挺难找到的。
文章
算法 · 数据库 · 索引 · 中间件 · 关系型数据库 · MySQL · SQL
2016-08-14
SQL Server DBA 30问 【itpub】
很多开发人员都想成为一名数据库培训,也有很多人一开始就把自己定位成为一名DBA,DBA究竟需要掌握些什么知识和技能呢?以下是我
做DBA工作和面试DBA时,整理的一些DBA方面的三十个问题,三十个大问题中还有许多小的问题,涵括了SQL Server 2008 R2培训比较多的技术知识点,与大家分享下,希望给有志做DBA的朋友们一些帮助:
1. char、varchar、nvarchar之间的区别(包括用途和空间占用);xml类型查找某个节点的数据有哪些方法,哪个效率高;使用存储
过程和使用T-SQL查询数据有啥不一样;
2. 系统DB有哪些,都有什么作用,需不需要做备份,为什么;损坏了如何做还原(主要是master库);
3. 有哪些操作会使用到TempDB;如果TempDB异常变大,可能的原因是什么,该如何处理;
4. Index有哪些类型,它们的区别和实现原理是什么,索引有啥优点和缺点;如何为SQL语句创建合适的索引,索引创建时有哪些需要注意的项,如何查看你创建的索引是否被使用;如何维护索引;索引损坏如何检查,怎么修复;T-SQL有更好的索引存在,但是运行时并没有使用该索引,原因可能是什么;
5. 视图上我们能建索引吗,如果能建的话,会啥好处和坏处;视图上建索引和表上建索引有啥区别;
6. Job信息我们可以通过哪些表获取;系统正在运行的语句可以通过哪些视图获取;如何获取某个T-SQL语句的IO、Time等信息;
7. 在线系统,一个表有五千万记录,现在要你将其中的两千万条记录导入到另一台服务器的某个表中,导完后,需要将这两千万数据删除,你预备如何处理,优缺点是什么;
8. 数据库服务器报磁盘空间不足,你将如何应对,要求尽快恢复;
9. 临时表、表变量、CTE(公用表表达式)有啥区别和联系,保存位置有啥不一样,使用时如何决定选哪种;
10. SQLServer有哪些隔离级别,默认级别是哪个;数据库有哪些主要的锁类型;行版本控制是如何实现的;
11. 死锁如何跟踪;阻塞如何跟踪和查找;发现有问题的语句后,如何进行处理;用Profile做跟踪时,一般我们需要跟踪哪些事件;
12. Windows日志主要有哪几种,SQL Server培训日志一般保留几个,什么情况下会产生新的SQL日志;数据库日志恢复模式有哪几种,区别是什么;数据库日志突然变得很大,而且你无法收缩,可能的原因是什么,怎么查找原因,分别将如何处理;
13. 分区表和分区视图是什么概念,一般是在什么情况下使用,有啥好处;
14. 如何比较两个同结构的表数据的差异;如果表损坏了,如何修复;如何在备份文件有问题的情况下尽量还原数据;如何将一个表的Identity属性归零;
15. CheckPoint和LazyWriter区别;DDL Trigger 和 DML Trigger有啥用,区别是啥;
16. Mirroring 和Logshipping 的区别和使用场景;SQLServer的Mirroring与Oracle的哪像技术比较接近,它们的区别是啥;
17. Mirroring的搭建步骤,Mirroring三种模式区别,Mirroring 中同步和异步的原理和要求,搭建了Mirroring后,需要对数据库日志做什么处理;
18. Replication配置和使用场景;Replication有哪几种模式;PUSH和PULL有啥区别;搭建Replication后会产生一个什么库;报错时用什么来查看报错的具体语句,清理掉某个库的Replication使用什么语句,查看同步链信息主要通过哪些表;
19. Replication发布端的表能truncate吗,为什么;Replication Identity列如何处理、缺失字段错误如何处理、主键冲突错误如何处理、如何跳过指定的错误、订阅端表被删除了如何处理、大规模改动数据如何处理;某条同步链因为其中的某个表一次性改动数据很大造成同步链的严重延时,要求尽快恢复同步链,如何处理。
20. SSB(Service Broker)使用场景,如何创建,都会创建些什么对象,有啥优缺点,主要通过什么方式实现不同服务器之间的消息传递;可以通过哪些方式排错;
21. 跟踪数据库数据的变更有哪些方法,它们(CDC(Change Data Capture)、CT(Change Tracking)、Trigger等)使用上的优缺点;
22. SQL调优步骤,如何来判断SQL语句存在问题,怎么定位问题,如何解决这些问题;
23. 数据库故障排查步骤,如何处理紧急数据库问题;
24. 如何考虑和制定数据库备份计划;公司要求对一个非常大的数据库或者表做备份,而且要求数据量尽可能少丢失,你可能会采用什么方法;
25. 如果要你做数据库监控,你会关注那些指标(包括SQLServer和OCP培训),如何制定性能基线,你使用过哪些监控软件;
26. 数据库迁移步骤;重建一套比较大的测试系统(最少10个数据库实例),如果原来DB数据量都不大,但DB比较多,新搭建的系统数据都不需要,如何快速实现;
27. 创建Cluster 简要步骤,最少需要几个IP,需要安装些什么服务,需要哪些固定的磁盘,Raid如何设置,磁盘如何划分;SQLServerCluster与Mysql Cluster 和 Oracle RAC的区别等;
28. 如果遇到一个性能不理想、代码复杂的存储过程,很难通过数据库方面的调优来解决问题,你如何说服开发人员修改它(可能开发人员并不愿意修改);
29. 你有没有遇到过因为你的误操作造成系统故障发生的情况,你当时是如何处理的;如果没有,假定你误删了一个重要的表,你该如何处理;
30. 你准备成为一名什么样的DBA培训,为此你将如何准备(或者你有怎样的职业规划,准备怎样度过你的DBA生涯);如果你进入公司,你最想获得的是什么。
本文转自 Fanr_Zh 博客园博客,原文链接http://www.cnblogs.com/Amaranthus/archive/2011/11/11/2245335.html:,如需转载请自行联系原作者
文章
SQL · 监控 · 数据库 · 数据库管理 · 索引 · 关系型数据库 · Oracle · 存储 · 运维 · Windows
2017-11-07
如何备份sqlserver2000的数据库
如何备份sql server2000的远程数据库
场景:
之前做的一个项目,使用的数据库是sql server2000,这个数据库服务器在客户公司的主机上.
不过我们知道数据库的用户名和密码.
我们想定期备份数据库,如何备份呢?
使用企业管理器
步骤
(1)在本地安装sqlserver 2000 数据库
(2)启动sqlserver数据库服务,然后启动企业管理器
启动企业管理器
local就是本地数据库服务,启动它.
(3)注册远程的sqlserver服务
(4)开始备份
(5)选择要备份的远程数据库
(6)创建一个新的本地sqlserver 数据库
本地数据库创建完毕
为什么要在本地创建新的数据库?
用于复制远程的数据库
(7)选择复制方式
(8)选择要备份的数据表和视图
点击[下一步]开始备份
《七周七数据库》一一1.1 从一个问题开始
本节书摘来自异步社区出版社《七周七数据库》一书中的第1章,第1.1节,作者: 【美】Eric Redmond,更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.1 从一个问题开始
七周七数据库本书的核心问题是:哪种数据库或数据库组合最好地解决了你的问题?读完本书,如果你知道如何根据特定需求和手头的资源做出这种选择,我们会很高兴。
但要回答这个问题,你需要了解你的选择。为此,我们将带你深入这7个数据库,揭示精华,并指出瑕疵。你将亲手尝试CRUD操作,发挥你使用的模式的力量,并找到下面这些问题的答案:
● 这是什么类型的数据库?数据库分为各种类型,例如,关系型、键-值型、多列型、面向文档型和图型。流行的数据库(包括本书中介绍的)一般可以划分为这几大类型。你将了解每种类型的数据库,以及它们最适合的各种问题。我们对本书涉及的数据库精心挑选,以覆盖这些类型,包括一个关系数据库(Postgres),两个键-值存储数据库(Riak和Redis),一个面向列的数据库(HBase),两个面向文档的数据库(MongoDB和CouchDB),以及一个图数据库(Neo4j)。
● 驱动力是什么?数据库不是凭空产生的。它们是为了解决实际使用中提出的问题。在RDBMS(关系数据库管理系统)出现的环境中,数据库查询的灵活性比灵活的模式更重要。另一方面,建立面向列的数据库是为了适于存储跨多机的大量数据,而数据之间的关系退居次要地位。我们将介绍使用每个数据库的场景和相关的例子。
● 如何与数据库交互?数据库往往支持多种连接选项。只要某个数据库有交互式的命令行界面,我们会首先使用它,之后再介绍其他方法。如果需要编程,我们主要使用Ruby和JavaScript,尽管不时会用到其他几种语言,如PL/pgSQL(Postgres)和Gremlin(Neo4j)。更深入一层,我们将讨论诸如REST(CouchDB和Riak)和Thrift(HBase)协议。第9章将介绍一个更复杂的数据库环境,它由Node.js JavaScript实现联接在一起。
● 每种数据库的独特性体现在哪里?任何数据存储库都支持写入和读回数据。它们在其他的方面彼此大不相同。有些数据库允许对任意字段的查询。有些数据库提供快速索引查找。有些数据库支持自由定义的查询(ad hoc query);而其他的数据库的查询必须先规划。模式是数据库所强制的一个刚性框架,或仅仅是一些随意商定的准则?理解每种数据库的功能和限制,将有助于挑选适合你的工作的数据库。
● 每种数据库的性能如何?这个数据库如何工作?其开销如何?它支持分片吗?复制呢?它是否使用一致散列均匀地分布数据?它将相似的数据放在一起吗?这个数据库为读、写或其他操作做了优化吗?如果你能对优化进行控制,程度如何?
● 每种数据库的可伸缩性如何?可伸缩性与性能相关。没有上下文,谈论可伸缩性一般不会有结论。本书会提供背景知识,你在建立这个上下文时就能提出正确的问题。虽然如何扩展每个数据库的讨论会有意淡化,但在这些章节里,你会发现每种数据存储库是更容易实现横向扩展(MongoDB、Hbase和Riak),还是传统的纵向扩展(Postgres、Neo4j和Redis),或者介于两者之间。
我们的目标不是将某种数据库的新手培养成大师。如果这样做的话,其中任何一个数据库都将充满整本书的篇幅。但最终你应该能够牢牢把握每个数据库的优势,以及它们的不同。
文章
存储 · JavaScript · NoSQL · 关系型数据库 · 数据库 · Hbase · 分布式数据库 · Redis · 前端开发 · MongoDB
2017-05-02
数据库软件架构设计些什么
缘起:受@萧田国 萧总邀请,上周五晚上在“高效运维1号群”内分享了《58同城数据库软件架构设计与实践》(这个topic今年在数据库大会上分享过),应组织方要求,发出纪要。
一、基本概念
二、数据库架构设计思路
(1)可用性
(2)读性能
(3)一致性
(4)扩展性
一、基本概念
概念一“单库”
概念二“分片”
分片解决的是“数据量太大”的问题,也就是通常说的“水平切分”。
一旦引入分片,势必有“数据路由”的概念,哪个数据访问哪个库。
路由规则通常有3种方法:
(1)范围:range
优点:简单,容易扩展
缺点:各库压力不均(新号段更活跃)
(2)哈希:hash
优点:简单,数据均衡,负载均匀
缺点:迁移麻烦(2库扩3库数据要迁移)
(3)路由服务:router-config-server
优点:灵活性强,业务与路由算法解耦
缺点:每次访问数据库前多一次查询
大部分互联网公司采用的方案二:哈希分库,哈希路由
概念三“分组”
分组解决“可用性”问题,分组通常通过主从复制的方式实现。
互联网公司数据库实际软件架构是:又分片,又分组(如下图)
二、数据库架构设计思路
数据库软件架构师平时设计些什么东西呢?至少要考虑以下四点:
(1)如何保证数据可用性
(2)如何提高数据库读性能(大部分应用读多写少,读会先成为瓶颈)
(3)如何保证一致性
(4)如何提高扩展性
2.1如何保证数据的可用性?
解决可用性问题的思路是=>冗余
如何保证站点的可用性?复制站点,冗余站点
如何保证服务的可用性?复制服务,冗余服务
如何保证数据的可用性?复制数据,冗余数据
数据的冗余,会带来一个副作用=>引发一致性问题(先不说一致性问题,先说可用性)
如何保证数据库“读”高可用?
冗余读库
冗余读库带来的副作用?读写有延时,可能不一致
上面这个图是很多互联网公司mysql的架构,写仍然是单点,不能保证写高可用。
如何保证数据库“写”高可用?
冗余写库
采用双主互备的方式,可以冗余写库
带来的副作用?双写同步,数据可能冲突(例如“自增id”同步冲突),如何解决同步冲突,有两种常见解决方案:
(1)两个写库使用不同的初始值,相同的步长来增加id:1写库的id为0,2,4,6...;2写库的id为1,3,5,7…
(2)不使用数据的id,业务层自己生成唯一的id,保证数据不冲突
58同城没有使用上述两种架构来做读写的“高可用”,58同城采用的是“双主当主从用”的方式:
仍是双主,但只有一个主提供服务(读+写),另一个主是“shadow-master”,只用来保证高可用,平时不提供服务。
master挂了,shadow-master顶上(vip漂移,对业务层透明,不需要人工介入)
这种方式的好处:
1)读写没有延时
2)读写高可用
不足:
1)不能通过加从库的方式扩展读性能
2)资源利用率为50%,一台冗余主没有提供服务
那如何提高读性能呢?进入第二个话题,如何提供读性能。
2.2如何扩展读性能?
提高读性能的方式大致有三种,第一种是建立索引。这种方式不展开,要提到的一点是,不同的库可以建立不同的索引。
写库不建立索引;
线上读库建立线上访问索引,例如uid;
线下读库建立线下访问索引,例如time;
第二种扩充读性能的方式是,增加从库,这种方法大家用的比较多,但是,存在两个缺点:
(1)从库越多,同步越慢
(2)同步越慢,数据不一致窗口越大(不一致后面说,还是先说读性能的提高)
58同城没有采用这种方法提高数据库读性能(没有从库),采用的是增加缓存。常见的缓存架构如下:
上游是业务应用,下游是主库,从库(读写分离),缓存。
58同城的玩法是:服务+数据库+缓存一套
业务层不直接面向db和cache,服务层屏蔽了底层db、cache的复杂性。为什么要引入服务层,今天不展开,58采用了“服务+数据库+缓存一套”的方式提供数据访问,用cache提高读性能。
不管采用主从的方式扩展读性能,还是缓存的方式扩展读性能,数据都要复制多份(主+从,db+cache),一定会引发一致性问题。
2.3如何保证一致性?
主从数据库的一致性,通常有两种解决方案:
(1)中间件
如果某一个key有写操作,在不一致时间窗口内,中间件会将这个key的读操作也路由到主库上。
这个方案的缺点是,数据库中间件的门槛较高(百度,腾讯,阿里,360等一些公司有,当然58也有)
(2)强制读主
58的“双主当主从用”的架构,不存在主从不一致的问题。
第二类不一致,是db与缓存间的不一致
常见的缓存架构如上,此时写操作的顺序是:
(1)淘汰cache
(2)写数据库
读操作的顺序是:
(1)读cache,如果cache hit则返回
(2)如果cache miss,则读从库
(3)读从库后,将数据放回cache
在一些异常时序情况下,有可能从【从库读到旧数据(同步还没有完成),旧数据入cache后】,数据会长期不一致。
解决办法是“缓存双淘汰”,写操作时序升级为:
(1)淘汰cache
(2)写数据库
(3)在经验“主从同步延时窗口时间”后,再次发起一个异步淘汰cache的请求
这样,即使有脏数据如cache,一个小的时间窗口之后,脏数据还是会被淘汰。带来的代价是,多引入一次读miss(成本可以忽略)。
除此之外,58同城的最佳实践之一是:建议为所有cache中的item设置一个超时时间。
说完一致性,最后一个话题是扩展性。
2.4如何提高数据库的扩展性?
原来用hash的方式路由,分为2个库,数据量还是太大,要分为3个库,势必需要进行数据迁移,58同城有一个很帅气的“数据库秒级扩容”方案。
如何秒级扩容?
首先,我们不做2库变3库的扩容,我们做2库变4库(库加倍)的扩容(未来4->8->16)
服务+数据库是一套(省去了缓存)
数据库采用“双主”的模式。
扩容步骤:
第一步,将一个主库提升
第二步,修改配置,2库变4库(原来MOD2,现在配置修改后MOD4)
扩容完成
原MOD2为偶的部分,现在会MOD4余0或者2
原MOD2为奇的部分,现在会MOD4余1或者3
数据不需要迁移,同时,双主互相同步,一遍是余0,一边余2,两边数据同步也不会冲突,秒级完成扩容!
最后,要做一些收尾工作:
(1)将旧的双主同步解除
(2)增加新的双主(双主是保证可用性的,shadow-master平时不提供服务)
(3)删除多余的数据(余0的主,可以将余2的数据删除掉)
这样,秒级别内,我们就完成了2库变4库的扩展。
OK,今天主要分享了58同城,数据库软件架构上:
(1)如何保证数据可用性
(2)如何提高数据库读性能
(3)如何保证数据一致性
(4)如何进行秒级扩容
希望大家有收获,谢谢大家!
===【完】===