IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

数据库

共 1099 篇文章

IT 2016-02-21 22:55:45 / 累计浏览 2,370

MySQL processlist中最哪些状态要引起关注

排查MySQL性能问题时,盯着processlist看哪些SQL在跑只是第一步。更重要的是,通过连接的状态判断其是否正在经历瓶颈。这篇讲的就是那些需要特别警惕的processlist状态,以及背后对应的优化方向。 文章列举了从“copy to tmp table”、“Sending data”到“Waiting for lock_type lock”等12个关键状态。比如,看到“copy to tmp table”频繁出现,意味着你的ALTER TABLE操作可能在业务高峰锁表,建议使用pt-osc工具或移到凌晨执行。“Sending data”则常因查询扫描数据量过大,核心解法是创建合适的索引并添加LIMIT。而一旦出现各种“Waiting for... lock”,特别是全局读锁或元数据锁,就说明有DDL操作在阻塞整个实例,必须调整维护窗口。 作者将每个状态与具体的数据库行为(如磁盘IO差、临时表溢出、锁等待)和明确的优化动作(如调参数、加索引、换引擎)直接关联起来。下次当你发现数据库响应慢,除了看慢查询日志,不妨也看看processlist里的这些“状态信号灯”,往往能更快定位到问题根源。

本机暂存
IT 2016-02-21 22:50:46 / 累计浏览 2,759

教你如何查询当前主流数据库及其排名?

查询数据库流行度排名有捷径吗?作者直接指向了db-engines.com这个权威榜单。这篇文章带我们快速浏览了2015年6月的数据库流行度前十名,像Oracle、MySQL、SQL Server这些巨头稳居前列,但有意思的是,微软的Access依然高居第七,让不少开发者感到意外。同时,Redis作为新贵闯入了前十,而国产的巨杉数据库排名则从186位滑落至235位,引发了讨论。 榜单的排名并非凭空而来,它综合了277个数据库在资讯网站、谷歌搜索、技术讨论、招聘市场以及社交网络上的热度数据。通过这些多维度的积分统计,这个榜单真实反映了当时各类数据库在开发者社区和行业中的实际关注度与应用情况。对于需要了解数据库技术趋势或进行技术选型的人来说,这提供了一个非常直观的参考视角。

本机暂存
IT 2016-02-21 22:46:50 / 累计浏览 3,224

一次临时表空间大量占用问题的处理

这篇讲的是如何诊断和解决一个核心交易系统临时表空间暴涨至600GB的问题。作者从实际案例出发,发现占用临时空间的大量排序段,并非由当前执行的SQL产生,而是源于大量会话打开了需要复杂排序的查询游标后,一直没有关闭,导致Oracle必须维持这些游标的状态和已排序的数据,从而长期占用临时段。 文章详细展示了排查过程:通过v$sort_usage定位到大量会话关联同一个SQL_ID,但发现该SQL本身并不需要排序。真正的“元凶”是这些会话中打开的另一个游标——一条对千万级数据进行排序的业务查询。由于应用在取数后未正确关闭游标,使得排序段无法释放。作者甚至用PL/SQL代码复现了这一过程,清晰演示了临时空间是如何被一个未关闭的游标“泄漏”出去的。 这篇案例的精彩之处在于,它纠正了一个常见误区,并提供了一套实用的诊断思路:当遇到临时表空间异常时,应重点检查会话的打开游标,特别是那些有大量排序操作且未完成处理的SQL,而不仅仅是看当前正在执行的语句。

本机暂存
IT 2016-02-20 11:26:24 / 累计浏览 4,488

MySQL DBA修炼秘籍

这篇指南从职业发展路径出发,为立志成为MySQL DBA的同行勾勒了一幅清晰的修炼地图。作者结合自身及业内经验指出,现代互联网公司的MySQL DBA远不止是数据库管家,还需深入主机、网络、安全甚至自动化开发,逐步向运维DBA、开发DBA、架构师等专精方向演进。 文章核心在于“如何修炼”。从数据库基础概念与Linux入门讲起,到推荐《MySQL必知必会》、官方手册等学习材料,并强调通过搭建博客等实践来巩固知识。对于在职DBA,则给出了深入学习并发事务、锁机制、存储引擎等关键点的方向。 更吸引人的是,文中描绘了DBA理想的日常工作图景:约10%的时间通过平台处理基础运维,大部分精力投入SQL审核、主动性能优化、监控以及与业务的深度沟通,实现从“救火”到“防火”的转变。文末还附上了官方手册、知名技术博客等一系列实用资源。如果你正徘徊在DBA门口,或想系统规划进阶,这篇过来人的经验总结值得细品。

本机暂存
IT 2016-02-16 23:00:07 / 累计浏览 2,075

更好的 SQL 模式的 10 条规则

这篇讲的是数据库模式设计中常被忽视、却会影响长期维护效率的细节。作者从大量实际数据库的读写经验出发,总结了十条黄金法则,帮助开发者从源头避免未来的“痛苦”。 它核心强调命名与结构的清晰性。例如,对象名只用小写字母、数字和下划线,避免使用点、空格和大写,这能消除查询时的引号依赖和大小写混淆。列名和表名应具备自说明性,避免使用晦涩缩写或保留字。外键命名需保持全局一致。 此外,文章给出了具体的数据类型建议:主键推荐使用自增整数而非UUID,以简化查询和数据清理;时间数据应存储为统一的DATETIME类型,并始终使用UTC时区,而非字符串或Unix时间戳。它还指出应追求单一数据源,谨慎使用JSON列进行分析,并避免过度规范化(例如无需为邮编等简单值单独建表)。 遵循这些规则,能让你的数据库结构在未来需求变化和团队扩张时,依然保持清晰、高效且易于维护。

本机暂存
IT 2016-02-16 22:13:25 / 累计浏览 1,430

MySQL怎么计算打开文件数?

遇到“Can't open file”或“Too many open files”报错,是MySQL DBA的常见噩梦。这篇文章就从这个典型故障切入,系统性地剖析了MySQL打开文件数的多层限制与计算逻辑。 问题的根源在于文件描述符(FD)在MySQL中受到三层限制:操作系统内核级(fs.file-max)、用户进程级(ulimit -n)以及MySQL自身的参数。文章将后者的参数比喻为“电闸”和“电路保险”——open-files-limit是总开关,超限会影响整个实例;innodb-open-files则单独管控InnoDB文件,达到上限时会静默替换,相对柔和。 解决思路是从外到内逐层提升:先调整sysctl和ulimit的系统限制,再精细配置MySQL参数。文章的重点正是对open-files-limit、innodb-open-files、table-definition-cache和table-open-cache这四个参数的深度解读。它详细说明了每个参数在不同MySQL版本下的默认值、计算规则(如open-files-limit在5.6.8后的自动计算公式),以及table cache的LRU淘汰机制。 文章的价值在于,它将分散的知识点整合成一个清晰的“分层限制与解决”框架,并用生动的比喻和具体的版本数据,帮助读者理解“为什么”和“怎么做”,而不仅仅是罗列配置项。

本机暂存
IT 2016-02-16 22:12:05 / 累计浏览 3,033

倡议:MySQL压力测试基准值

这篇讲的是MySQL压力测试的标准化倡议。作者从日常压测的四种典型目的出发——比如对比MySQL版本性能、验证硬件升级效果、评估参数调整影响,或是评估新业务负载——指出了一个现实痛点:缺乏统一的基准,同行之间难以有效对比和借鉴测试结果。 为此,老叶在文中提出了一个具体的MySQL压力测试基准值倡议(2015试行版),并配套提供了数据采集模板。文章的核心价值不仅在于这个标准化提议,更在于一系列扎实的实操建议:如何避免缓存干扰测试(数据量需超过innodb_buffer_pool_size,每轮测试后清理系统缓存)、如何模拟真实线上流量(推荐使用tcpcopy)、以及如何全面解读压测结果(除TPS外,需重点关注iowait、svctm、事务响应时间等关键指标)。此外,文中还分享了提升tpcc_load数据加载效率的并行化技巧。 这篇文章将倡议与方法论结合,既推动了行业内的经验共享,也为工程师们提供了从工具选择到结果分析的完整压测指南。

本机暂存
IT 2016-02-16 21:18:29 / 累计浏览 2,959

mysql索引合并:一条sql可以使用多个索引

很多开发者可能还固守着“一条SQL只能使用一个索引”的旧观念,其实MySQL的索引合并特性早已支持更灵活的索引使用。这篇技术文章就详细拆解了这个特性。 文章首先厘清了概念:索引合并并非新事物,它能让MySQL对**同一个表**的多个索引进行范围扫描,并将结果通过并集、交集等方式合并,最终返回数据。要判断查询是否利用了索引合并,只需在`EXPLAIN`结果中看`type`列是否为`index_merge`,以及`key`列是否列出了所有被使用的索引。 作者通过一组精心设计的数据和查询进行演示。例如,当执行`WHERE (key1_part1=4 AND key1_part2=4) OR key2_part1=4`时,`EXPLAIN`显示成功使用了索引合并(`Using sort_union(key1,key2)`)。但另一个结构相似的查询却导致全表扫描。文章指出,这揭示了一个核心事实:**优化器是否选择索引合并,根本上取决于对数据统计的分析和成本估算**,单纯讨论SQL写法是否“能用”索引并不全面。 此外,文章还提到了一个关键的版本差异细节:在MySQL 5.6.7之前的版本中,存在“range优先”原则,可能会抑制索引合并的使用,即使后者理论上更优。这提醒我们,在考虑索引策略时,数据库版本也是不可忽视的因素。

本机暂存
IT 2016-02-16 20:25:32 / 累计浏览 2,523

Oracle 11g大对象数据新技术

这篇内容专门针对 Oracle 数据库中令人头疼的 ORA-00600 内部错误,提供了一套从定位到解决的系统化诊断手册。它首先点明,这类错误本质上是 Oracle 软件遇到了不一致的低级异常,成因可能涉及 Bug、操作系统或硬件。 文章的核心价值在于其清晰的排查路径:第一步永远是检查 alert.log 和 trace 文件;第二步是利用 Metalink 提供的专用诊断工具,通过输入错误的第一个参数和数据库版本号快速检索知识库;第三步则是整理必要信息,向 Oracle Support 提交 SR。 作者特别强调了 trace 文件的完整性和参数信息的关键作用,并用“ORA-00600 [729]”空间泄漏的实例,演示了如何通过设置特定事件参数来规避这类可忽略的内存泄漏告警。整体而言,文章将复杂的内部错误排查流程,拆解成了可操作的步骤,对 DBA 构建故障处理预案很有参考价值。

本机暂存
IT 2016-02-16 12:07:56 / 累计浏览 3,291

那些常见的Oracle错误

这篇讲的是Oracle数据库运维中那些高频出现的“拦路虎”。作者从DBA经常面临的实际故障现场出发,梳理了ORA-00600、内存耗尽、空间不足等几类典型问题。文章不止于罗列现象,而是深入到了问题的“肌理”——比如ORA-00600这类内部错误,其第一个参数和数据库版本就是定位根因的钥匙;ORA-04030则往往与PGA内存分配和操作系统限制有关。 更实用的部分在于诊断思路。文章引导读者从检查alert.log和trace文件入手,还指出了Oracle官方在Metalink上提供的600/7445诊断工具这个利器。针对具体案例,如ORA-00600[729]“UGA空间泄露”,给出了设置事件参数“10262”来屏蔽小泄露的明确解决方案。这种“故障现象-诊断方法-官方工具-具体参数”的完整链条,为运维人员构建了一套可复用的排查预案,能有效降低面对突发故障时的手足无措感。

本机暂存
IT 2016-02-14 00:06:24 / 累计浏览 2,695

Oracle字符类型存数字及查询数字时使用单引号走不走索引的问题

这篇文章解决的是一个在实际数据库开发中容易产生争议的问题:用varchar2类型存放的数字字段,在查询条件中给数字加上单引号,到底会不会导致索引失效?作者从团队内部的实际分歧出发,通过在Oracle 11.2.0.4.0版本上进行测试来验证结论。 文章首先通过建表和数据准备,复现了讨论的场景。核心对比点在于两种常见的错误认知:一种是认为“char类型存数字,查询不加单引号不走索引”;另一种则想验证“varchar2类型存数字,查询加单引号是否还会走索引”。作者通过具体的执行计划截图(文中虽未显示但提到测试信息),清晰地展示了不同写法下的索引使用情况。 最终得出了明确的结论:对于varchar2类型字段,无论在查询时是否为数字加上单引号,都能正常走索引。这个结果厘清了一个常见的误解,并为后续将varchar2字段改为number类型的设计决策提供了数据支持。对于DBA和开发人员而言,理解数据库在处理隐式类型转换时的具体行为,有助于编写出既准确又高效的SQL语句。

本机暂存
IT 2016-02-13 22:29:10 / 累计浏览 3,725

MySQL DBA面试全揭秘

这篇讲的是 MySQL DBA 面试中的门道,作者从一位资深面试官的视角出发,详细拆解了面试流程和考察重点。文章指出,优秀的 DBA 人才抢手,面试需要精心设计。流程上,除了基础交流,会重点深挖简历中的技术细节和跳槽经历,以此考察候选人的真实水平、学习方法以及职业规划是否清晰。 在技术考察方面,文章以索引类型为例,展示了面试的深度。问题可能从数据结构(B+树、哈希)、物理存储(聚集与非聚集)到逻辑分类(主键、唯一索引)多个维度展开,要求候选人不仅要知其然,还要知其所以然。作者还提醒,面试是双向选择的过程,候选人也可以从面试官的提问和交流中,评估未来的团队环境和主管风格。这篇文章对准备面试的候选人和需要选拔人才的面试官,都提供了非常具体的行动指南。

本机暂存
IT 2016-02-10 23:11:17 / 累计浏览 2,541

MySQL drop database恢复(恢复方法同样适用MySQL drop table,delete,truncate table)

这篇讲的是一个真实的数据库灾难恢复案例。作者从一起线上事故切入:有人误点了产品软件的“清空数据”功能,导致一个MySQL数据库被直接执行了drop database操作,且事前没有任何备份。情况很紧急,但处理思路很清晰——立刻封存现场,将核心的InnoDB表空间文件ibdata1备份了出来。 接下来,作者借助专业的MySQL recovery工具,对这个18MB的ibdata1文件进行了深度解析。文章中展示了使用stream_parser工具扫描和提取数据的命令行过程,这是恢复的关键第一步。经过6个小时的分析和处理,最终的核心成果是:实现了核心数据的零丢失。 这个案例的价值不仅在于给出了drop database后的具体恢复路径,也印证了这类误操作在数据库管理中并非个例。它提醒我们,即便在高度自动化的系统中,对“清空数据”这类高危功能的设计和权限控制需要格外谨慎,而及时、有效的应急响应和文件级备份(而非仅依赖逻辑备份)在极端情况下可能是最后的救命稻草。

本机暂存
IT 2016-02-10 22:53:20 / 累计浏览 4,592

SQLIte这么娇小可爱,不多了解点都不行啊

这篇以轻松比喻开篇的文章,将SQLite与MySQL、Oracle这些“壮汉”数据库对比,形象地突出了SQLite“轻量嵌入式”的核心定位。作者没有停留在简单的介绍,而是深入剖析了SQLite的设计哲学与技术细节。 文章系统梳理了SQLite的关键特点:零配置、无服务器、单文件存储、跨平台且体积极小(可低于300KiB),同时也坦诚指出了它在并发写入、存储过程和用户权限管理上的局限。其核心价值在于,对于移动设备等特定场景,这些缺点往往可以接受,而其优点则非常突出。 更深入的部分在于对SQLite事务与锁机制的解析。文章详细阐述了其5种锁状态(UNLOCKED到EXCLUSIVE)和3种事务类型(DEFERRED、IMMEDIATE、EXCLUSIVE)如何协同工作,并解释了潜在的死锁问题。特别针对SQLite 3.7.0引入的WAL(Write-Ahead Logging)机制,文章对比了传统的回滚日志方式,说明了WAL如何通过将修改写入单独文件来实现“读写并发”,显著提升了性能,同时也指出了其适用条件和潜在缺点。 总体来看,文章从形象类比到特性清单,再到深层机制剖析,层层递进。它告诉读者,SQLite并不仅仅是一个“简单”的数据库,其内部有着精巧的事务控制逻辑,理解这些是用好它的关键。

本机暂存
IT 2016-02-10 22:48:58 / 累计浏览 2,437

MySQL异常恢复之恢复数据字典表讲解

当InnoDB存储引擎崩溃或系统表空间损坏后,要从底层恢复用户数据,理解核心的数据字典表是关键的第一步。这篇文章深入剖析了MySQL(特指早期版本)InnoDB内部四个用于记录表与索引元信息的系统表:SYS_TABLES、SYS_INDEXES、SYS_COLUMNS和SYS_FIELDS。 作者从数据恢复的实际需求出发,没有停留在表面定义,而是清晰地拆解了每个表的核心字段及其在恢复流程中的具体作用。例如,指出了恢复时最依赖的是记录表信息的SYS_TABLES和记录索引B+树根页位置的SYS_INDEXES,而列信息表(SYS_COLUMNS)与索引列分布表(SYS_FIELDS)则在需要精确还原表结构时提供支持。文章还解释了这些表各自默认存储在哪个系统索引ID中(如SYS_TABLES在index_id 1,根页为8号页),这对于手工定位和抽取字典至关重要。 作者对每个表的核心字段都做了拆解,比如强调SYS_INDEXES中的PAGE_NO字段直接指向索引的根页,这是恢复数据的入口。通过理解这些底层元数据,DBA在面对无法正常启动的MySQL实例时,就能理清恢复思路,利用工具定向提取关键信息,为抢救数据奠定基础。

本机暂存
IT 2016-02-10 22:35:12 / 累计浏览 1,165

MySQL 5.7 传统复制到GTID在线切换

这篇文章详细讲解了如何将 MySQL 5.7 的传统复制架构,在线、平滑地切换至基于 GTID 的复制模式。它首先明确了两个前提条件:版本需在 5.7.6 及以上,且初始所有节点必须处于 `gtid_mode=off` 状态。 核心方案是一套环环相扣的九步操作流程。文章特别强调了第一步设置 `enforce_gtid_consistency = warn` 时,必须确保所有节点都没有警告输出,这是后续切换成功的关键。切换过程通过逐步调整 `enforce_gtid_consistency` 和 `gtid_mode` 两个全局变量来实现,并建议在设置 `gtid_mode=on_permissive` 时,先从 slave 节点执行再操作 master,以确保新产生的日志立即带有 GTID。 整个流程中,一个重要的验证点是反复查询 `ongoing_anonymous_transaction_count` 状态值,必须在所有节点确认为“0”后,才能进行最终的 `gtid_mode=on` 设置。最后,文章还提醒需要将配置固化到配置文件,并重启从库复制服务以启用自动位置追踪(`master_auto_position=1`)。 整套方案无需停服,通过精细的状态控制与验证,实现了从传统复制到 GTID 复制的在线无损切换,是数据库管理员维护高可用集群时一份非常实用的分步指南。

本机暂存
IT 2016-02-09 23:33:03 / 累计浏览 2,613

MySQL索引之主键索引

这篇文章厘清了MySQL中主键索引和辅助索引的几处关键区别。 作者从两者的定义出发,指出主键索引是唯一标识记录、不可为NULL的索引,而辅助索引则包括唯一索引和非唯一索引。核心对比在于不同存储引擎下的行为差异:在MyISAM中,一个不允许NULL的唯一索引与主键索引本质相同,性能也相当;但在InnoDB中,主键索引即聚集索引,而辅助索引(无论是否唯一)存储的都是指向主键的指针,因此通过辅助索引查找数据需要额外的转换步骤。 文章用一组测试数据直观地展示了性能区别:在100万行数据的MyISAM表上,普通索引的随机检索效率比主键索引慢了30%以上;而在InnoDB表上,唯一索引比主键索引慢约9%,普通索引的差距则扩大到50%以上。这清楚地说明,理解这些索引机制对于InnoDB的表结构设计与查询优化至关重要。

本机暂存
IT 2016-02-07 14:53:24 / 累计浏览 1,363

MySQL运行中被改权限测试

这篇讲的是一个真实的线上踩坑经历。作者的一位朋友遭遇了数据库目录权限被运维人员误改为 root 的紧急情况。为了弄清后果,作者特意搭建了 MySQL 主从环境进行测试。 实验中,将主库目录权限改为 root 后,在触发日志切换(flush logs)之前,主库的数据写入和主从复制似乎一切正常。但关键问题在日志切换时暴露:主库因无权创建新 binlog 文件而报错,而从库虽然收到了新的日志文件名,却无法获取到实际日志内容,导致复制中断。 这个现象有点反直觉:权限错误并未立刻阻塞所有数据操作,却为数据同步埋下了一颗定时炸弹。文章的结论很明确:一旦发生这种情况,主库的数据是最全的,但主从已经失同步。作者最后还附上了修复思路和关于这或许是 MySQL 一个“诡异”行为的思考。

本机暂存
IT 2016-02-06 23:58:32 / 累计浏览 2,543

Spark的性能调优

这篇文章从实战经验出发,汇总了Spark性能调优的多个关键方向。内容不仅涵盖基础配置,更深入到应用代码设计与任务执行策略。 开篇即点明,调优的第一步往往从数据序列化开始,对比了默认的Java序列化与更快更紧凑的Kryo方案。紧接着是内存管理,文章给出了具体的检测方法(如使用UI或SizeEstimator)和优化建议(如启用压缩指针)。GC调优部分尤为实用,解释了默认内存分配比例、Eden区设置,并分享了如何避免因大量对象创建导致的“GC overhead limit exceeded”错误。 对于影响性能的关键因素,文章详细阐述了并行度、Reduce Task内存使用以及Shuffle的优化。例如,通过广播变量减少大表shuffle是一个经典模式。数据本地性的五个层级及其调度策略也被清晰说明。文件存储与读取优化(如使用Parquet列存格式)和Speculation(推测执行)机制也被纳入考量。 最后,文章强调了合理设置分区数和减少不必要Shuffle的重要性,并给出了具体的代码示例指引。整篇文章既包含JVM级别的参数调整,也涉及Spark应用层的数据结构设计与API选择(如prefetchByKey vs groupByKey),是一份从理论公式到实战经验的综合性调优指南。

本机暂存
IT 2016-02-06 23:53:55 / 累计浏览 1,450

MySQL不同复制模式下,如何忽略某些binlog事件

当MySQL主从复制因主键冲突、数据不存在等错误而中断时,如何快速跳过问题事件让复制继续?这篇技术博客给出了清晰的解决方案。 文章首先区分了两种场景。在未启用GTID的传统模式下,方法相对直接:通过`STOP SLAVE`、`SET SQL_SLAVE_SKIP_COUNTER=N`、`START SLAVE`三步,即可跳过指定数量的事件。但在启用GTID的现代架构中,操作则更为精细,需要手动计算并设置`GTID_PURGED`来“抹掉”导致错误的那个事务,让复制从下一个事务恢复。 此外,文章还推荐了Percona Toolkit中的`pt-slave-restart`工具,它能自动监控并忽略特定错误(如1062错误或匹配指定文本的错误),重启复制进程,是DBA手中非常便捷的利器。 整体来看,文章从手动命令到自动化工具,覆盖了处理复制错误的多种思路,对比了不同模式下的操作差异与工具带来的便利性,为数据库运维人员提供了实战性很强的参考指南。

本机暂存