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

浏览: 3646

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

感谢微软公司、我的家人、博客园、宋沄剑、高文佳、听风吹雨、黄总、论坛里的怡红公子 、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企业级平台管理实践》这本书开始的~

 

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

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

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

 

可以提供的书籍有:

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(可惜在北京),也有猎头找到我问我有没有兴趣跳槽

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

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

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


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

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

 

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

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

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

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

这个教训会伴随着我~ 


感谢博客园

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


关于数据库的优化

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

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

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

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

 

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

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

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

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

最后用了也白搭

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

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

 

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

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

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

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

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

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

 

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

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

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

 

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

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

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


关于技术屏蔽

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

比如下面这个场景

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

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

最后,MVP大侠B走了

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

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

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

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

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

 

内部培训

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

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

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

 

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

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

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

 


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

我这里有一个愿望:

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

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

 

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

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

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

 

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


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

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

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

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

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

 

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


井底之蛙

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

大家可以看一下这篇文章: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<Spinlock<153,1,0> >::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年多没有太多要说的

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

  

这就是我的心路历程

 

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

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

 

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

推荐 2
本文由 桦仔 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

2 个评论

感谢分享经验,每个成功者都会有一些想说的话,支持桦仔。
桦仔

桦仔 回复 leon

谢谢您的支持

要回复文章请先登录注册