欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

SQLSERVER MVP 我的心路历程和想说的话

程序员文章站 2022-05-07 15:50:43
...

SQLSERVER MVP 我的心路历程和想说的话 这里一如既往的先感谢帮助过我的人(排名不分先后): 感谢微软公司、我的家人、博客园、宋沄剑、高文佳、听风吹雨、黄总、论坛里的怡红公子 、rmiao、KevinLiu328 我的同事、园子里的哥本哈士奇、stswordman、邀月等

SQLSERVER MVP 我的心路历程和想说的话

SQLSERVER MVP 我的心路历程和想说的话

这里一如既往的先感谢帮助过我的人(排名不分先后):

感谢微软公司、我的家人、博客园、宋沄剑、高文佳、听风吹雨、黄总、论坛里的怡红公子 、rmiao、KevinLiu328

我的同事、园子里的哥本哈士奇、stswordman、邀月等等等 ,还有很多很多人我需要感谢的

我在他们的帮助下不断成长~


关于SQLSERVER的开发

我一直很好奇,SQLSERVER这个软件到底有多少人在开发

后来我看了一篇文章:SQL Server Build系统


SQLSERVER要学习的内容

其实学习数据库有很多东西需要你掌握,不是说你学习了一两年的SQLSERVER,就能够说对于SQLSRVER非常精通

其实要学的东西还多着呢,没有多年的开发经验是很难精通SQLSERVER的,加上SQLSERVER的技术一直在更新

我觉得自己所掌握的SQLSERVER的东西还只是冰山一角

例如下面几项技术:

1、SQL Azure

2、SQLSERVER复制

3、SQLSERVER集群

4、SQLSERVER负载均衡

5、SQLSERVER插件开发

6、SQLSERVER BI开发

7、存储系统

现在技术日新月异,今天你学会了这个,微软明天在SQLSERVER出个新功能,你也要学习

在DBA的日常工作中,某些工作或者很多工作一般都会超出SQLSERVER联机丛书BOL(Books Online)的范畴

有些SQLSERVER的功能甚至在BOL里都没有提到,只能自己测试

所以学习是永无止境的,不单只对SQLSERVER的学习


为什么我选择写SQLSERVER方面的文章

博客园中的技术类文章非常多,编程,软件工程,运维,面试,算法等等

其中写数据库方面的文章也是获得最多人关注的一种技术文章之一

因为现在的程序大部分都离不开数据库,大部分都要用到数据库

写数据库方面的文章不仅C#技术人员可以看,PHP技术人员可以看,JAVA技术人员也可以看

而如果你写的是C#方面的文章,那么PHP技术人员并不想看,那么你的文章的关注率就会降低

而目前市面上主流数据库就那么几个,找工作的时候也比较好,如果公司用的C#技术,只会PHP的程序员不会去面试

编程语言这麽多,就算是主流的编程语言也有很多,有时候选择工作的范围也是比较窄的

大家可以看一下博客园里推荐博客排行榜里,排前10的就有两个是数据库专家


计算机之路

从2007年开始说起吧

2007年:高考时候数学不合格,最喜欢的科目是英语,糊里糊涂就考入了广州某个大专院校,糊里糊涂就选择了“软件开发”专业

2008年:学习数据结构的时候特别对算法不感冒,无论怎麽听都不明白,想不到以后会做跟计算机相关的工作,虽然现在不是程序员

2009年:考试各科都合格,顺利拿到毕业证,但是对于前面的路很迷茫

2010年:在家乡的某个论坛认识了前一个公司的老板,老板在帖子里说亲自教授嵌入式编程,当时自己对计算机方面工作还是比较感兴趣

跟老板一起出差,到客户那里进行系统培训,出差回来就进入了公司,公司做的是油站管理系统,用的数据库是SQLSERVER,

慢慢开始研究SQLSERVER,但是真的算深入研究是从买了徐老师的《SQLSERVER企业级平台管理实践》这本书开始的~

跟大家一样,平时自己学习会买很多技术图书,其中有很多都当废纸卖给收废品的

如果你想要的话我可以免费给你,前提是邮费您们来付(到付),反正摆在家里也是当摆设

先到者先得,我会在文章结尾公布谁获得了我的书本

SQLSERVER MVP 我的心路历程和想说的话

SQLSERVER MVP 我的心路历程和想说的话

SQLSERVER MVP 我的心路历程和想说的话

SQLSERVER MVP 我的心路历程和想说的话

SQLSERVER MVP 我的心路历程和想说的话

可以提供的书籍有:

FLASH CS4标准教程
Linux系统管理员职业技能鉴定教程
面向对象程序设计与VC++6.0教程
Windows server2003从入门到精通
AUTO CAD实用教程
VS2008高级编程
等级考试-二级JAVA语言
JAVA程序员上班那点事儿
从零开始学EXCEL VBA
C#应用程序设计教程
网店赢家淘宝新手开店7步通
ASP.NET案例教程
批处理命令在Windows操作中的典型应用
汇编语言程序设计教程第二版
Illustrator CS3 中文版
TCP/IP详解 卷1:协议
Microsoft .NET 企业级应用架构设计
程序员考试辅导
C++程序设计教程--基于VS2008
矛与盾 黑客就这几招
矛与盾 黑客攻防与脚本编程
WCF技术剖析
深入浅出WPF

留下您的联系方式:姓名,收货地址,手机,默认圆通快递

每人只能够取一本


某数据库大牛的话

数据库的变化,某一天我看到某位数据库大牛朱XX在新浪微博发了一条:

关键之关键在于数据库的内核:存储机理,索引机制,SQL编译器,优化机制,等等,

一般来说,数据库的小版本会改进优化机制,提供新函数,大版本可能就会提供新索引,改写SQL编译器等等,

但是如果真正改变存储机理,那一定是革命性变化。

我觉得这个也适用于SQLSERVER,SQLSERVER在SQLSERVER2005的时候,存储机理发生了比较大的变化,

然后到SQL2008、 SQL2008 R2、 SQL2012都没有多大变化存储机理,你掌握的个中原理也不会过时


我在这一年里大概做了哪些事

清华出版社某个机构博图轩找我出书,sql中国区产品经理叫我加入sql pass(可惜在北京),也有猎头找到我问我有没有兴趣跳槽

不过这些猎头很多都不靠谱,我写的是数据库方面的文章,他推荐一个在武汉的系统架构师的职位给我

因为他看到我在博客园里资料,当时我感兴趣的技术写了“架构设计”,不过现在我改了

SQLSERVER MVP 我的心路历程和想说的话

博客园里的某位大侠叫我去上海微软去面试SQLERVER技术支持(最后因为比较穷,心里没有底怕掌握的姿势不够,怕面试不通过亏了就没有去了)


对于前一份工作中所犯的错误

经常在论坛或者QQ群里经常说到:DBA是随时都要准备简历的,万一做错了,你有可能承担不起

本人曾经就试过,就算是初学者都知道的问题你也可能会犯了,因为工作太累等等原因

虽然没有丢数据,但是因为我的出错,造成客户的数据错乱,让公司造成了损失

被领导训了一顿,并要写检讨书,这件事虽然没有扣工资,但是印象特别深刻

所以做任何重要操作前都需要备份,不然的话神仙也很难拯救您!

这个教训会伴随着我~


感谢博客园

博客园真的很好:1 人多 2 自定义js让不懂前端的人用简单的js能够装饰博客, 3上传图片方便,很多图片也不怕


关于数据库的优化

我客观的以我自己个人的观点讨论一下吧

在这里再说一下性能,性能这个东西真的不能一概而论,比如某篇文章《性能极高的分页存储过程》,

很多情况下,你的表有没有加索引,加的索引是不是对的

数据量是不是很大,有没有用其他技术,性能都跟这些有关系

网上有很多数据库调优的教条、文章,真的非常非常多,每次我都要去收藏这些文章,记住每一个教条

在哪种情况下用哪个教条去优化数据库,记不住了就在收藏的文章里找,现在我这种情况,好像用A文章的优化会比较好

但是B文章里的情况跟我现在的情况又匹配,究竟用哪个好呢???

当然啦,有部分文章还会误导人,有些文章中的环境跟你的环境又不一样,虽然情况一样,但是有可能因为数据库版本、操作系统版本不同会产生不一样的结果,

最后用了也白搭

如果你还停留在我上面所描述的阶段,那么你应该要系统地学习一下数据库

结合实战经验,多动手做实验才是硬道理

说到这里让我想起了之前某件事情:

我曾经在博问里问过一个问题

“请问什么叫索引对齐?什么叫稠密索引 什么叫稀疏索引?”

当时网上没有一篇文章能够说得很清楚,很明白,都是你抄我的文章,我抄你的文章

无奈之后只有在博问里问高手了,我是一个非常喜欢寻根问底的人,不懂的东西一定要找遍互联网

除非真的找不到答案,不然的话我不会罢休的

当时有一个小虾三级给了我这样一个回复

SQLSERVER MVP 我的心路历程和想说的话

我当时无语了,一直到现在我还是没有明白“什么叫稠密索引 什么叫稀疏索引?”

这个博问帖子我到现在还没有结贴o(∩_∩)o

其实要做大牛真的要经常看下面的网站里的博客文章,从中去吸收,我发觉基本上都是英文资料,学习起来非常吃力

我希望有更多人去写书,去写像《SQLSERVER企业级管理平台实践》这样的有深度的书,或者翻译下面网站的

一些博客,然后刊登在书本里就好了

SQLSERVER MVP 我的心路历程和想说的话


关于技术屏蔽

这里说的技术指的是不泄露公司机密信息的情况下

比如下面这个场景

比如:两个MVP在同一个部门,某天MVP大侠A遇到数据库问题,MVP大侠A说索引太宽了

MVP大侠B不知道宽索引、窄索引,想请教MVP大侠A,但是MVP大侠A一副高高在上的样子

最后,MVP大侠B走了

我想如果MVP大侠A能够使用一些方式例如写博客、讨论、白板等工具来跟MVP大侠B沟通,结果肯定不一样

(至于什么是宽索引,什么是窄索引我也不是很清楚)

可惜大部分公司都不是这样

没有大家互相切磋的平台,MVP大侠B不会进步,当然不是说谁的水平高的问题,大家交流一起进步

才是最重要的,不是的话,辞职是迟早的事情 ,或者会进入一个恶性循环

内部培训

员工可以选择自己感兴趣的技术讲座

有时候小公司(这里针对某些小公司不是全部)真的不适合新手,虽然做了很多项目但是充其量只能是熟手不能是大侠,

小公司没有培训,很多制度不完善,打杂的活特别多

最重要缺少的是交流和分享,交流和分享从何而来?

网上、公司内部培训 、外面的技术沙龙(技术沙龙的内容讲的内容不一定是你们在使用的)所以关键还是公司内部培训

网上的交流毕竟是有限的,面对面的交流才是最重要的!提高大家研究公司所使用的技术的兴趣


对于博客园里面的每个读者和博主

我这里有一个愿望:

对于博主:希望读者反对的时候留下您们反对的声音、意见,不要按一下“反对”按钮,拍拍屁股就走了,

每个博主都希望听取反对者的真实的反对声音,进一步改进自己的文章

对于读者:一篇好文章基本上都会有反对,不是一味地推荐,有反对的文章证明博文的题材比较有争议性

既然有反对,证明这篇文章值得去看,有读者对此有不同的观点,如果只有推荐,那么大家都一味崇拜博主

认为博主很牛,不动手验证一下,那么对读者是没有好处的

我这里的愿望不单只针对我自己写的博文,园子里的所有博主和读者应该都是这样希望吧o(∩_∩)o


在出差的时候看到吉日大师的书

在2013年11月份去了南宁出差,由于酒店离南宁书城(朝阳广场附近)很近

夜晚刚食完饭,就到处瞎逛,刚好路过南宁书城,进去肯定光顾一下计算机板块

刚好看到吉日大师的书,我翻了几页没有买,里面写了吉日大师如何从低级程序员干到高级程序员,书里面他说了如何学习NEC公司的系统架构

他的经历真的值得我们学习,我也希望有一天能把自己的经历整理成书

SQLSERVER MVP 我的心路历程和想说的话

不过最后我还是买了这本书,作为技术人员不能总是看技术书籍的,有时候也需要放松一下的o(∩_∩)o

SQLSERVER MVP 我的心路历程和想说的话


井底之蛙

其实有时候我也觉得自己是井底之蛙,为什麽这样说?

大家可以看一下这篇文章:Buffer Latch Timeout的解析

下面是文章中的内容:

下面是一个案例分析。我们在数据库的错误日志里,发现有下面的错误,并且产生了一个内存转储。

A time-out occurred while waiting for buffer latch -- type 2, bp 0000000088FBFA40, page 1:153568, stat 0xc0010b, database id: 10, allocation unit Id: 72057594047758336, task 0x000000000C8E2988 : 0, waittime 300, flags 0x1a, owning task 0x0000000005A2F048. Not continuing to wait.

下面是对内存转储的的分析,为了简单起见,不相关的调用堆栈被省略。

我们可以看到,下面的这个进程在获取Buffer Latch的时候,由于无法及时得到Latch锁,产生了上述错误信息,并生成一个内存转储。

0a 00000026`ebe09350 00000000`0215d1b8 sqlservr!CDmpDump::Dump+0x7c

0b 00000026`ebe093a0 00000000`0215dd0c sqlservr!SQLDumperLibraryInvoke+0x1a0

0c 00000026`ebe093d0 00000000`021503f7 sqlservr!CImageHelper::DoMiniDump+0x3d4

0d 00000026`ebe095d0 00000000`0206af82 sqlservr!stackTrace+0x82b

0e 00000026`ebe0ab20 00000000`02069f69 sqlservr!LatchBase::DumpOnTimeoutIfNeeded+0x19a

0f 00000026`ebe0abf0 00000000`008e7bcc sqlservr!LatchBase::PrintWarning+0x205

10 00000026`ebe0ace0 00000000`000e7a29 sqlservr!LatchBase::Suspend+0xd12

11 00000026`ebe0b950 00000000`000a0689 sqlservr!LatchBase::AcquireInternal+0x1ff

12 00000026`ebe0b9f0 00000000`000a1792 sqlservr!BUF::AcquireLatch+0x8d

13 00000026`ebe0bd10 00000000`000a166c sqlservr!BPool::Get+0xc7

14 00000026`ebe0bd70 00000000`000a35a0 sqlservr!PageRef::Fix+0xbc

15 00000026`ebe0bdd0 00000000`000a320a sqlservr!BTreeMgr::Seek+0x44d

16 00000026`ebe0bff0 00000000`000a2e5d sqlservr!BTreeMgr::GetHPageIdWithKey+0x20a

17 00000026`ebe0c070 00000000`000a38e8 sqlservr!IndexPageManager::GetPageWithKey+0xbd

这时,错误信息中的owning task地址0x0000000005A2F048对于问题的分析就很重要了。

我们通过owning task的地址,结合内存转储分析,可以找到对应于该owning task的进程编号。

其调用堆栈如下:

0:175> kM

# Child-SP RetAddr Call Site

00 00000026`f027fa68 000007fe`fcd910dc ntdll!ZwWaitForSingleObject+0xa

01 00000026`f027fa70 00000000`00083b1a KERNELBASE!WaitForSingleObjectEx+0x79

02 00000026`f027fb10 00000000`00082d76 sqlservr!SOS_Scheduler::SwitchContext+0x26d

03 00000026`f027ffa0 00000000`00082700 sqlservr!SOS_Scheduler::SuspendNonPreemptive+0xca

04 00000026`f027ffe0 00000000`000829ac sqlservr!SOS_Scheduler::Suspend+0x2d

05 00000026`f0280010 00000000`000e7e46 sqlservr!EventInternal >::Wait+0x1a8

06 00000026`f0280060 00000000`000e7a29 sqlservr!LatchBase::Suspend+0x599

07 00000026`f0280cd0 00000000`00645aac sqlservr!LatchBase::AcquireInternal+0x1ff

08 00000026`f0280d70 00000000`00646a49 sqlservr!SQLServerLogMgr::GrowAFile+0x7c

09 00000026`f0281150 00000000`000cb38b sqlservr!SQLServerLogMgr::ReserveAndAppend+0x1fb

0a 00000026`f0281290 00000000`000cbe89 sqlservr!XdesRMReadWrite::GenerateLogRec+0x567

0b 00000026`f02813d0 00000000`000cbc23 sqlservr!XdesRMReadWrite::LogBeginXact+0x243

0c 00000026`f0281530 00000000`000cbc3f sqlservr!XdesRMReadWrite::MakeActive+0x64

0d 00000026`f0281560 00000000`001746c1 sqlservr!XdesRMReadWrite::GenerateLogRec+0x87

0e 00000026`f02816a0 00000000`00174860 sqlservr!PageRef::ModifyRow+0xce0

0f 00000026`f02818f0 00000000`00176749 sqlservr!PageRef::ModifyColumnsInternal+0x1b3

10 00000026`f0281b50 00000000`00175f71 sqlservr!IndexPageRef::Modify+0x2fd3

上面的调用堆栈显示,这是在增长数据库日志文件

由于数据库日志无法及时增长完成,因此导致了这个线程长时间拥有Latch锁而不释放,而其他进程无法及时获取相应的Latch锁。

到现在我还没有看明白在哪里可以看出数据库日志文件在增长?

要看懂调用堆栈需要熟悉Windows的底层和SQLSERVER的内部原理,才知道SQLSERVER在做什么操作


关于梦想驱动

各位程序员肯定或多或少听过事件驱动领域驱动这些软件开发概念

就像事件驱动

百度百科的解释:鼠标的一个点击,移动,键盘的按键按下等等操作,都是对应操作系统的一个事件,然后应用程序接受你的操作进行处理

那么人呢?

我们每天起床、刷牙、洗脸、上班、吃饭、下班/加班、睡觉究竟为了什么???

人由什么来驱动??

我觉得是由梦想来驱动,有了梦想我们就有了目标,可以追的目标

正因为有梦想驱动着我们,我们觉得每天的生活才有意义,您们说对吗?

我自己的梦想,嘻嘻,不方便透露了,希望不那么晚实现就行o(∩_∩)o


如何写一篇好文章

写出一个好软件需要重构您的代码,写文章也是一样,要重构您的文章,重构您的语言文字


文章出品时间

其实这篇文章我在2013年9月已经写好了,一直保存为草稿,一直在修改,一直在补充,希望在拿到MVP那天将自己的所有想法爆发出来

文章标题我改了,感觉只有心路历程没有想说的话比较单薄,而且心路历程刚毕业3年多没有太多要说的

SQLSERVER MVP 我的心路历程和想说的话

如果拿不到MVP,可能这些想法就会一直埋藏了

SQLSERVER MVP 我的心路历程和想说的话

这就是我的心路历程

有人说:当云计算普及之后,DBA这个职位就会消失了,无论DBA这个职位消失与否,我希望喜欢数据库的人还能做着数据库的相关工作

无论是业余的还是平常工作中,就算是业余的,我相信您在未来的某一天可以找到一份自己喜欢的DBA的工作的

以上为个人观点,如有不对的地方,欢迎大家拍砖o(∩_∩)o

书本已经全部寄出,因为屋企附近没有圆通快递,所以最后选择了韵达快递

陈培伟《批处理命令在Windows操作中的典型应用》

韵达单号:8000025193647

陈宏军《VS2008高级编程》

韵达单号:8000025193648

张健《WCF技术剖析

韵达单号:8000025193649

杨志朋《Windows server2003从入门到精通》

韵达单号:8000025193650

汤雪勇《大话设计模式》

韵达单号:8000025193651

赵洪舵《等级考试-二级JAVA语言》《JAVA程序员上班那点事儿》

韵达单号:8000025193659

高山《TCP/IP详解 卷1:协议》

韵达单号:8000025193661

江辉《深入浅出WPF》

韵达单号:8000025193658

刘重阳《程序员考试辅导》

韵达单号:8000025193660

*迪《Microsoft .Net企业级应用架构设计》

韵达单号:8000025193653

黄晓峰《网店赢家淘宝新手开店7步通》

韵达单号:8000025193654

余益栋《矛与盾黑客攻防与脚本编程》

韵达单号:8000025193652