昨天H然有客户反应系l无法正常的操作?jin)!感到很震惊啊Q系l一直运行正常啊Q怎么?x)突然出问题。于是赶紧跟t调查终于发C(jin)问题的根源?/p>
问题一Q数据库 'XXXX' 的事务日志已满。若要查明无法重用日志中的空间的原因Q请参阅 sys.databases 中的 log_reuse_wait_desc ?/p>
问题二:(x)无法为数据库 'XXX' 中的对象 ''PK_tbl_XXXX' 分配I间Q因?'PRIMARY' 文gl已满。请删除不需要的文g、删除文件组中的对象、将其他文gd到文件组或ؓ(f)文gl中的现有文件启用自动增长,以便增加可用盘I间?
对于解决q两个问题的解决Ҏ(gu)如下Q在|上搜烦(ch)?jin)一把,问题解决?jin)。现在整理了(jin)如下Q:(x)
问题一的解x法:(x)
Ҏ(gu)1Q?nbsp; MSSQL2005日志的收~?/strong>
Q?/span>.右键在清除日志的数据库,?#8220;TestDB”Q点?/span>[新徏查询QQQ?/span>]
Q?/span>.输入以下SQL语句Q其?#8220;TestDB”是数据库名称
DUMP TRANSACTION TestDB WITH NO_LOGQ?执行该SQLQ成功后l箋以下操作
Q?/span>.右键该数据库节点Q点?/span>[dQTQ?/span>] -> [收羃QSQ?/span>] -> [文gQF(tun)Q?/span>]
Q?/span>.在弹出的“收羃文g”对话框中Q将“文gcdQTQ?#8221;选ؓ(f)“日志”Q将“收羃操作”选中“在释放未使用的空间前重新l织(OQ?#8221;
Q?/span>.?#8220;文件收~到QKQ?#8221;文本框中输入后面提示的最大的数|点击[定]卛_?/span>
Ҏ(gu)2Q下面的所有库名都指你要处理的数据库的库名
1.清空日志
DUMP TRANSACTION 库名 WITH NO_LOG
2.截断事务日志Q?br />BACKUP LOG 库名 WITH NO_LOG
3.收羃数据库文?如果不压~?数据库的文g不会(x)减小
企业理?/span>--右键你要压羃的数据库--所有Q?-收羃数据?-收羃文g
--选择日志文g--在收~方式里选择收羃至XXM,q里?x)给Z个允许收~到的最M?直接输入q个?定可以了(jin)
--选择数据文g--在收~方式里选择收羃至XXM,q里?x)给Z个允许收~到的最M?直接输入q个?定可以了(jin)
也可以用SQL语句来完?
--收羃数据?/span>
DBCC SHRINKDATABASE(库名)
--收羃指定数据文g,1是文件号,可以通过q个语句查询?select * from sysfiles
DBCC SHRINKFILE(1)
4.Z(jin)最大化的羃?yu)日志文?如果是sql 7.0,q步只能在查询分析器中进?
a.分离数据?
企业理?/span>--服务?-数据?-右键--分离数据?/span>
b.在我的电(sh)脑中删除LOG文g
c.附加数据?
企业理?/span>--服务?-数据?-右键--附加数据?/span>
此法生成新的LOGQ大只?00多K
或用代码Q?
下面的示例分?pubsQ然后将 pubs 中的一个文仉加到当前服务器?br />a.分离
EXEC sp_detach_db @dbname = '库名'
b.删除日志文g
c.再附?br />EXEC sp_attach_single_file_db @dbname = '库名',
@physname = 'c:/Program Files/Microsoft SQL Server/MSSQL/Data/库名.mdf'
5.Z(jin)以后能自动收~?做如下设|?
企业理?/span>--服务?-右键数据?-属?-选项--选择"自动收羃"
--SQL语句讄方式:
EXEC sp_dboption '库名', 'autoshrink', 'TRUE'
6.如果想以后不让它日志增长得太?br />企业理?/span>--服务?-右键数据?-属?-事务日志
--文件增镉K制ؓ(f)xM(x是你允许的最大数据文件大?
--SQL语句的设|方?
alter database 库名 modify file(name=逻辑文g?maxsize=20)
特别注意Q?span style="color: #008080">--最好备份日志,以后可通过日志恢复数据。。?/span>
以下为日志处理方?br />一般不做第4,6两步
W?步不安全,有可能损坏数据库或丢失数?br />W?步如果日志达C?则以后的数据库处理会(x)p|,在清理日志后才能恢复.
问题二的解决Ҏ(gu)Q?/strong>
解决Ҏ(gu)Q?br />1.(g)查你的磁盘剩余空间是否?如果没有盘剩余I间,则清理磁?腑ևI间
2.(g)查你的磁盘分区格?br />如果是FAT16,则数据文件最大只能是2G
如果是FAT32,则数据文件最大只能是4G
改ؓ(f)NTFS分区则没有这U限?/span>
3.(g)查一下你有没有限制数据库文g的大?br />企业理?-右键你的数据?-属?-文g增长限制--如果有限制大?取消限制
4.(g)查你的SQL版本,如果你用MSDE,则限制了(jin)数据文g最大是2G
5.你也可以?primary l添加新的数据文件来解决q个问题
alter database 库名 add file(NAME = 逻辑文g?FILENAME = 'c:/实际文g?ndf'
或?选中数据?>属?>文gQ添加一个新文g
正式分n之前Q徐晓介l了(jin)QQI间目前的v量服务数据规模(?Q:(x)
?——QQI间量服务数据规模
接下来,徐晓把QQI间成长和发展的历程分成三个阶段Q石器时代、冷兵器时代和现代战争时代,分n?jin)QQI间从开始甚至难以生存,到逐步发展成国内最大的SNSC产品背后的酸甜苦辣?/p>
矛_时代是QQI间1.0?.0E_上线的过E?/p>
徐晓_(d)(x)“QQI间在石器时代遇到的最大难题就是如何生存?如何让这个襁褓中的品活下来Q如何积累第一批宝늚用户资源Q?#8221;Q?2005qQQI间首发Q最初是采用传统的发N(g)L(fng)的方式征集第一批用戗第一ƾQQI间是嵌在独立的客户端Y件中Q看似是个客L(fng)Q其实是一个浏览器内核Q里面都是HTML面Q以|站的方式存在?当初的架构非常简单,采用?jin)Apache搭徏Web ServerQMysql保存最l数据。用户通过{uin}.qzone.qq.com(uin是用户的QQL(fng))q样的方式访问自qI间。最开始上U时Q仅邀(g)请了(jin)?sh)信用户。但上线之后才发现很多北方网通用户也非常希望来体验。但如果让北方网通用戯|来讉K?sh)信的服务,那将是一个非常糟p的体验。因为当时的跨网之间的带宽是非常有限的?/p>
Z(jin)满|通用L(fng)需求,QQI间团队在网通搭Z(jin)一套与?sh)信一模一L(fng)服务Q电(sh)信的用户数据只存在电(sh)信的服务器上Q网通用h据只存在|通服务器上。看似异地分布,其实两部分数据是互相独立、不能冗余的。在用户注册开通空间时Q就定?jin)他的数据存在于哪个服务器上?/p>
用户讉KI间的逻辑抽象来说是这L(fng)Q如?Q:(x)用户通过览器发赯求访问我们的W一个CGIQ这个CGI再串行的获取用户数据Q比如:(x)装扮数据Q日志数据等。等获取到全部数据之后,q个CGI再将所有的数据D成一个完整的HTML面输出l用戗?/p>
?——Qzone2.0典型载入逻辑
但同ӞI间W一版的独立客户端也带来?jin)各U问题和?ch)恼Q?/p>
W一Q非怸利于定位问题?/strong>
一旦页面元素填写失败,定位问题是一仉?ch)的事情。因为它不是Web面Q所以只能用其他抓包软gQ比如EtherealQWireshark的前w)(j)来抓取网l包做分析。但那个时候网l抓包工L(fng)能力q比较弱Q没有高亮和HTML语法(g)等功能Q所以整体环境比较受限?/p>
W二Q服务接入层压力大?/strong>
׃不仅要接受用L(fng)hQ还要向后访问不同的数据。当后端某一个接口超时严重的情况下,很多用户的请求都?x)被挂v。这样就?x)消耗更多的q接资源Q对Web服务器CPU的消耗很大?/p>
W三Q服务集没有发挥出应有的服务能?/strong>
当时q30-40台服务器Q也只能支持50万左右的用户。无奈之下,团队想了(jin)一个没办法的办法:(x)有意限制过五十万用P提出?jin)一个排队等待机Ӟ学习(fn)底捞模式,当在Uh数达?0w的时候,QQI间?x)给用户展示一个Flash游戏,让用户在{待的时候玩游戏?/p>
针对当时存在的种U问题,团队做了(jin)以下改进来解冻I(x)
W一Q采用Web RIA?/strong>
当时大量使用?jin)Ajax技术来减轻服务器的负蝲。其中一个极端的例子是:(x)整个I间首页都是采用JSl制Q这栯够将用户讉K的CGI_轻量化。尽量简化了(jin)CGI逻辑Q让CGIE序q行更加强壮、效率更高。同Ӟ当服务异常时Q还可以通过JS脚本l制一个错误信息给予用hC。而且Q采用JS开发效率更高,调试更方ѝ?Web RIA化后Q降低了(jin)服务器CPU消耗的40%Q节U了(jin)DC的输出带宽约30%Q部分JS脚本都可以被览器Cache住)(j)?/p>
W二Q采用动?rn)分ȝ略?/strong>
?rn)态资源都攑֜自研的Web服务器qhttpd上,它具备当时ApacheSelect模型的两个数量以上的接入能力?/p>
W三Q采用自研的Web ServerQQzhttpQ主要用于动态分ȝ动态服务的需要?/strong>
׃Qzhttp是腾讯自研的、轻量的、更适合业务自己逻辑的Web ServerQ从而保证了(jin)它的高性能Q它的接入能力比Apache (非FastCGI模式)提高?倍?/p>
矛_时代做的最大的优化Q?/strong>
当用L(fng)请QQI间多个服务Ӟ每个服务都有独立的存储和处理逻辑。只有当所有的服务处理完成Q才?x)由QQI间框架服务器返回给用户。这样对于同时依赖日志、相册、音乐、留a的服务就?x)生两大问题?x)
针对q两个问题,做了(jin)首页载入性能优化?qing)首内定w(rn)态化pȝ两方面的优化Q?/p>
研究用户讉K模型。拉取展CUGC内容的变更比例是7Q?。用户之间互讉KJ,看他Z看自q比例?Q?.。通过以上数据Q可以看出用L(fng)UGC更新很少Q但是用户之间互相访问很频繁。根据用L(fng)q种讉K模型Q空间团队研发了(jin)一套静(rn)态化pȝQ图3Q。这套系l会(x)用户首늚内容全部CacheQ然后根据用L(fng)讉KQ以?qing)用戯己UGC内容的更改,采用一定策略更新静(rn)态化pȝ的Cache数据?通过增加首页内容?rn)态化pȝQ首展现速度?s提升?sQ用户也不用再玩游戏进行等待。同时在讑֤没有扩容的前提下Q同时在U用戯问数H破100w?/p>
?—首页内容?rn)态化pȝ
通过不断的改q和优化QQQI间3.0?006q中E_上线?/p>
冷兵器时代是在线人数从百万阵营向千万阵营q渡的过E。这个阶D做的更多的是功能的砺Q提高可用性的q程?/p>
但与此同ӞQQI间团队又面临了(jin)新的问题Q?/p>
之前有谈刎ͼI间的用h据是分布在电(sh)信与|通两套体pM的。但׃公司在网通的服务讑֤有限Q随着用户量的不断增加Q很快就辑ֈ?jin)网通设备服务的上限。网通不能扩容设备,但用户量q在不断增加。面对这U情况,只好网通和?sh)信的数据合qؓ(f)一套。当|通用戯问服务的时候,?x)通过一个代理将用户的请求{发到内网?sh)信服务上。采用这U方式,提供?jin)一套通用的解x案,可以解决外Q网通,教育|,铁通等q营商的问题?/p>
但这U跨|访问的?rn)态资源下载量非常大,?rn)态资源请求次?: CGIh数接q?0Q?Q所以采用CDN提供?rn)态资源下载,来提高用戯问速度。具体逻辑是:(x)Ҏ(gu)用户客户端IP判断用户属于哪一个ISP服务商,通过URL方式用L(fng)?rn)态资源访问定向到该ISP的服务设备上?/p>
q样Q蟩出CDNpȝ的拘束、优化思\Q解决了(jin)大部分教育网用户问题Q同时多U支持的思\成ؓ(f)公共Ҏ(gu)?但同时还是有很多的故障:(x)
?——用户容忍度曲U?/strong>
一般页面在1s内打开Q用户会(x)感觉体验非常畅。所以我们通过以下{略来保证服务质量:(x)
Z(jin)保证版本的服务质量,I间采用?jin)灰度发布策略。新Ҏ(gu)可能按照用户尾号发?每次新特性只对一部分h可见。一D|间内的用户反馈后Q不断修复和改进问题Q再逐步扩大用户对新特性的可见性,最后新Ҏ(gu)才对全量用户可见。同Ӟ也通过控制JS版本h辑ֈ?jin)灰度发布的目的?/p>
通过q些优化QQQI间成功t入千万U在U的阵营QQQI间5.0正式上线。其中主要变化:(x)后端服务q行?jin)重构,前端面也进行?jin)优化?/p>
l过反复的改q和优化QQQI间服务质量大幅提高Q但是,新的问题q是随之而来Q?/p>
不满于发日志、传照片的用P惌玩游戏、用某些web工具。同Ӟ公司其它团队要在QQI间上开发应用,但QQI间的应用配|都写死在QQI间q_逻辑里面。ؓ(f)配合其他团队上线Q发版本需要一周,工作不可q行Q非常耗时Q受C(jin)很大挑战。针对这U情况,我们采取?jin)两大措施?x)q_和应用架构分(如图5Q、简单配|后上线Q如?Q?/p>
?——q_和应用架构分?/strong>
?——单配|后上线
如果某天深圳的IDC不可用了(jin)怎么办?
Z(jin)解决q个问题Q空间团队做?jin)全国IDC的异地部|Ԍ采用“一点写Q多点读”模式的架构模型,服务部|到深圳、上天z和西安。深x一个写入点Q通过QQI间自己的一套同步系l同步到全国各个IDCQ如?Q。同时QQI间提供?jin)全方位的立体监控?*24时Ҏ(gu)务做监控?/p>
?——IDC分布
如何快速发现和解决用户的问题?
定位用户问题需要花很大的时间成本,q就要求团队做很多的监控工作Q服务器量监控、接口调用监控、前端测速监控、前端调用错误监控?/p>
同时Q在千万U到亿在线的过E中Q团队要有全国甚臛_球的分布和匹配分布的q营能力Q出问题可以快速切Ԍ全方位的立体化监控能力;各个逻辑层持l优化能力。只有持l优化,用户才能感知到性能的增加,用户才会(x)增加?/p>
l过无数ơ的推敲和不断优化,QQI间的服务能力已l能够支持千万别的用户在线hQƈ且能够给用户提供7*24时的不间断服务。向亿在线阵营冲刺也将指日可待Q?/p>
百万在线Q?/strong>
当时如何撑住服务Q让用户q来Q从而积累QQI间W一批用PҎ(gu)用户模型q行优化Q让QQI间架构有更好的接入能力Q做到高性能?/p>
千万在线Q?/strong>
通过各层的柔性服务和灰度发布的策略,让服务更加稳定,让用h量再上一个新台阶?/p>
亿在线Q?/strong>
服务要有更灵zR更敏捷的变更手Dc(din)同时有更好的监控和可运营的能力?/p>
接下来是半个时的Q&A环节Q同学们t跃提问Q徐晓做Z(jin)详细专业的解{。最后,徐晓和大家分享了(jin)“腾讯《v量服务之道》系列的优质评和秉承的原则”Q?/p>
Qzone是全球第二大SNSCQ仅ơ于Facebook。徐晓说Q?#8220;量服务的h(hun)D和用户对我们的厚爱造就?jin)现在的QQI间。我们会(x)持箋的发展,d各种NQ不断前q?#8221;
4?6?1:00Q两个小时的QQI间技术架构分享圆满结束!
Ƣ迎大家l箋期待腾讯大讲堂对外讲?#183;W八期《云|络能带l我们什么?。更多精彩,在腾讯大讲堂:(x)DJT.QQ.COM?/p>
lInfoQ中文站投E或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也Ƣ迎大家通过新浪微博Q?a >@InfoQQ或者腾讯微博(@InfoQQ关注我们,q与我们的编辑和其他读者朋友交?/p>
NSIS介:(x) 02、设|应用程序信息,如Y件名U、版本、出版h{,如图2。当然最一个网站可以留I,如果讄?jin),则安装包会(x)生成一个对应网址?#8220;Internet 快捷方式”?
NSIS ?#8220;Nullsoft 脚本安装pȝ”QNullsoft Scriptable Installation SystemQ的~写Q它是一个免费的 Win32 安装、卸载系l。它的特点:(x)脚本z高效;pȝ开销;当然q行安装、卸载、设|系l设|、解压文件等{更不在话下Q几乎可以做所有的事情。更多的功能请阅读蓝色网际的《NSIS帮助文档》?br />
对于制作NSIS的用教E,蓝色|际是NSIS斚w的专Ӟ她的《NSIS帮助文档》就是一本NSIS的圣l,而对初学者来_(d)最头疼的莫q于一大堆看不懂的代码Q对他们来说无异于一本天书。缘于此Q特草此基础教程Q希望NSIS专家们勿见笑Q不当之处欢q批评指正以期完善,也希望给初学者作个铺垫?br />
工具Q?/strong>NIS EditQNullsoft Installation SystemQNSISQ?br />
思\Q?/strong>脚本向导Q修改代码=个性化安装?br />
步骤Q?/strong>
一、利用向导制作安装包
01、安装上qCƾ,启动NIS EditQ在“文g”菜单?#8220;新徏脚本Q向?#8221;→下一?#8221;Q如??/p>
03、设|程序选项Q如安装包图标、安装程序文件、安装包语言[q里?#8220;SimChinese”]、用户图形界面及(qing)压羃方式{,我们可以选用默认|也可以点d应项目的按钮或下拉菜单更改设|,如图3?br />
07、指定安装后要运行的E序Q同上用默认值ƈ讄相关q行参数?qing)描qͼ如果你和我一h的话Q或不想在安装运行Q何程序,则留I即可,如图8?
08、这步是有关卸蝲E序的相关信息,如卸载时的提C、卸载的图标{,如图9?br />
09、至此完成向|如图10Q钩?#8220;保存脚本”?#8220;转换文g路径到相兌\?#8221;?#8220;~译脚本”?
提示保存脚本路径q自动编译脚本,我们可以按或F9q行安装E序q行预览Q向g生的安装包效果图如图11所C?br />
二、修改代码以个性化安装?/strong>
10、选择可修改之处。Y件LOGO[如图11A]、安装包标题[?1B]、图11C、图12、图13?br />
?1见上楹{?2如下
?3如下
11、修改代?br />
①、修改Y件LOGOQ在源代?#8220; MUI Settings”后面d下列代码Q?br />
E序代码
注释Q引号内Z囄路径Q位囑֤大Uؓ(f)165*298
效果囑֦?4所C?
②、修改安装包标题Q在同上位置d下列代码Q?br />
E序代码
注释Q\r\n为换行标?br />
效果图上楼如?4所C?br />
③、修改图11C中的说明Q同上位|添加下列代码:(x)
E序代码
效果囑֦?4所C?br />
④、对?2中的修改Q在源代码:(x)
E序代码
ShowUnInstDetails show
后添加:(x)
E序代码
效果囑֦?5所C?
⑤、在完成d“汉化说明”Q只要在源代码:(x)
E序代码
后添加:(x)
E序代码
!define MUI_FINISHPAGE_SHOWREADME_TEXT "汉化说明"
效果所C?
⑥、闪屏界面,可以在源代码中加入下列代码即可:(x)
A、普通效?br />
E序代码
SetOutPath $TEMP
File /oname=spltmp.bmp "G:\Temp\Nsisres\splash.bmp"
splash::show 2300 $TEMP\spltmp
Pop $0
FunctionEnd
B、渐隐闪?br />
E序代码
InitPluginsDir
File /oname=$PLUGINSDIR\splash.bmp "G:\Temp\Nsisres\splash.bmp"
advsplash::show 1500 800 600 -1 $PLUGINSDIR\splash
Functionend
⑦、背景音乐[贯穿安装q程]
E序代码
Function .OnInit
InitPluginsDir
SetOutPath $PLUGINSDIR
File "G:\Temp\Nsisres\music.mp3" [说明Q源MP3的存放\径]
System::Call msvfw32.dll::MCIWndCreate(i 0, i 0,i 0x0070, t "$PLUGINSDIR\music.mp3") i .r0
SendMessage $0 0x0465 0 "STR:play repeat"
System::Call user32.dll::ShowWindow(i r0, i 0)
StrCpy $hmci $0
Functionend
Section
;add your codes
SendMessage $hmci 0x0010 0 0
Sectionend
后语Q?/strong>
以上仅是NSIS制作安装包最基本的操作,供初学者入门之用,故云“初?#8221;。希望不?x)怡笑大方Q更希望蓝MM、陈敏毅老大{NSIS高手的中高教程?br />
_֓代码 (^-^)
1、闪屏效果(渐现渐隐Q?/strong>
E序代码
InitPluginsDir
File /oname=$PLUGINSDIR\splash.bmp c:\test.bmp
advsplash::show 1500 800 600 -1 $PLUGINSDIR\splash
Functionend
2、背景音?Q诏I安装全q程Q?/strong>
E序代码
InitPluginsDir
SetOutPath $PLUGINSDIR
File "c:\a.mp3"
System::Call msvfw32.dll::MCIWndCreate(i 0, i 0,i 0x0070, t "$PLUGINSDIR\a.mp3") i .r0
SendMessage $0 0x0465 0 "STR:play repeat"
System::Call user32.dll::ShowWindow(i r0, i 0)
StrCpy $hmci $0
Functionend
Section
;add your codes
SendMessage $hmci 0x0010 0 0
Sectionend
3、背景音?
E序代码
SetOutPath $PLUGINSDIR
File $WINDIR\MEDIA\chimes.wav
BgImage::Sound /NOUNLOAD /WAIT "$PLUGINSDIR\chimes.wav"
BgImage::Clear /NOUNLOAD
Sectionend/Functionend
4、闪屏效果[渐隐]Q背景音乐[全程]
E序代码
Var hmci
Function .OnInit
InitPluginsDir
SetOutPath $PLUGINSDIR
File "c:\a.mp3"
System::Call msvfw32.dll::MCIWndCreate(i 0, i 0,i 0x0070, t "$PLUGINSDIR\a.mp3") i .r0
SendMessage $0 0x0465 0 "STR:play repeat"
System::Call user32.dll::ShowWindow(i r0, i 0)
StrCpy $hmci $0
File /oname=$PLUGINSDIR\splash.bmp c:\test.bmp
advsplash::show 1500 800 600 -1 $PLUGINSDIR\splash
Functionend
Section
;add your codes
sleep 5000
SendMessage $hmci 0x0010 0 0
Sectionend
5、如何把安装面中的“Setup安?#8230;…”中的SetupҎ(gu)别的?/strong>
只需?br />
E序代码
前面d一?br />
E序代码
6、设|了(jin)自定义安装、卸载图?/strong>
E序代码
!define MUI_UNICON "G:\Temp\Nsisres\Win 卸蝲.ico"