随说秋色园从Access升迁到MSSQL过程

秋色园的运行环境概况:

目前运行在国外godaddy的虚拟主机的一个子目录中,数据库为Access。

 

随说Access分页:

 

1:top max(id)

CYQ.Data 数据框架支持上Access时,以top max(id)为分页方式。

在秋色园没有多少文章的情况下,基本上维持着正常的秩序。

直到秋色园在进化版本时,多字段排序的情况出现,如:order by 字段1,字段2。

原始的 top max(id)已无法正常的显示分页的数据了。

 

2:not in

top max(id)只适用于单字段排序,无法适用多字段排序,自然就无法通用了。

CYQ.Data的分页方式,从top max(id) 改成常规的 not in方式。

一开始没有测试数据量,随便点点感觉分页也挺快的。

后经秋色园的文章上到三四千时,发现分页奇慢,已无法让它在存活了,于是把它给灭了。

 

3:3次top

灭掉not in方式,换上了3次top,分起页来那是刷刷刷,速度快的不行。

于是这种方式,一直存到至今,当前3-4万的数据中,分页虽不快,但勉强也能接受。

 

虽然我一直想从程序上优化,让Access坚持到10万的数量级也能正常的表现,

 

不过有些事总来的太快,Access无法逃脱的弱点:并发。

 

Access在并发写数据上,有着不可估计的错误,从秋色园的后台异常日志记录中,最常出现的错误:

Could not update; currently locked.SQL:Update Blog_User Set VisitCount=64359+1 where ID=111

这个异常一早出现次数比较多,后来通过程序优化之后,通过在内存计数,随机概率才更新数据库方式,每天平均就2-3次的情况出现。

 

按理这个也很好解决,在update之前lock一下即可解决,

不知咋的,我就是一直下不了手,难道是次数太少,总被我忽略了啊!

 

还有另一个打击人的异常:

Unspecified errorSQL:select count(*) from Blog_Content where Year(CreateTime)=2011 and Month(CreateTime)=1 and UserID=67 and TypeID=0 and IsPub=true

这个异常平时不出现,一出现秋色园就基本打不开了,而且会占好长时间,网上搜索的答案好就是什么临时文件满了,挤不进去导致的。

这个我又控制不了服务器,也没啥法子解决。

 

今天呢,在几十个网友同时操作写数据时,情况来了,基本上也是处于打不开的状态

 

于是呢,打算把秋色园从Access升到MSSQL了。

 

为啥不考虑SQLite数据库呢?

其实一开始是有考虑用SQLite的,不过由于时间比较紧,而且框架对于一些函数的通用性,只处理了Access/MSSQL/Oracle三种,啥意思呢?

就是同一个函数,在不同的数据库时,名称,用法,都可能不同,好多其它支持多数据库的系统,多数写两条或多条语句了,不同的数据库版本提交不同的DLL复盖。

而CYQ.Data在底层上进行了处理,可以让1条语句,自动解析成不同数据库类型的语句,这样就达到一种写法,多处兼容的状态。

由于SQLite和MySQL是最近版本新加的,所以还没做兼容处理,加上感觉从Access向SQLite导数据不好导,所以就没用了。

 

不过我发现,MSSQL的数据导入导出功能,是有SQLite这一项的,前提好像就是我安装过SQLite的驱动,有空再尝试尝试了。

 

好了,决定换数据库了,Access数据库在远程服务器,咋整?

由于寄在人家子目录里,所以除了FTP权限,其它啥权限都没。

因此,最常见的文件夹压缩也没了。

所以呢,就用ICSharpCode.SharpZipLib.dll写了个Zip在线压缩,Access压缩后还是能少好几倍的大小的。

 

压缩之前,要做点什么事呢?

一开始最基本的想法是:停止站点访问,这样就不会对数据库产生读写操作。

 

后来灵机一动,用了另一种方法,什么方法?

秋色园由于自定义了生命周期,于是有很多的统一关口,我只要轻松的把OnPost事件关口给操作,改成操作输出:

很抱歉:系统正在升级,无法提交数据。

这样就轻松避开了用户对数据库的写操作了,又保证站点的正常访问。

 

接着压缩了下,300多M压缩成60多M,56K的网速,下载了十多分钟,也就下载完了。

 

下面就接着导数据了:

尝试把数据导到本机测试一下,发现很多Memo类型的字段,都导不进来!!

还得把数据库对应字段都改成nvarchar(max)才能导进去。

导完又得把字段改回去,一改一导一动,花了不少时间。

 

再接着本地测试:

运行秋色园站点,发现首页出不来,调度发现,少了个字段,重新导麻烦,只好写sql更新。

再来发现秋色园的两个系统分类失踪了,花了不少时间查到原因,于是给补上了。

 

从本机向远程导:

再后来,从本机的MSSQL向远程的MSSQL导数据了,由于有数据库链接,自然也能导了,

一开始发现两边的字段类型有点区别,还得修正一下。

然后接着导,一直到现在才导了1万多,还差2万,所以我就在这写文章了。

 

导数据自增ID的问题:

过程中,小小遇到另一个事情,由于自增ID开启时,是无法导入ID的,

所以在创建表时,只好把自增加ID去掉,想导完数据后再补上。

却发现,用SQL要补上不是件容易的事,最简单的方式自然就是用IDE。

不过SQL Server Management Studio链接远程数据库的话,几百几千的数据库,

基本上够卡死机子不用动了,更别说改好了。

 

原来还有VS:

好在发现Microsoft Visual Studio 2005的服务器链接,能只显示单个数据库,于是用它来修改主键和自增ID,的确省时又省心许多。

 

写到现在,数据才导了11649条,还有2万多条,我也得睡了,明早早点起来看了。

 

补充:

现在早上七点多,起床一看,发现:

错误 0xc0202009: 数据流任务: 出现 OLE DB 错误。错误代码: 0x80004005。
已获得 OLE DB 记录。源:“Microsoft SQL Native Client” Hresult: 0x80004005 说明:“Could not allocate a new page for database 'cyqdata' because of insufficient disk space in filegroup 'PRIMARY'. Create the necessary space by dropping objects in the filegroup, adding additional files to the filegroup, or setting autogrowth on for existing files in the filegroup.”。
 (SQL Server 导入和导出向导)

 

由于事务回滚,开机导了一个晚上,一条数据也没导过去,太让人伤心了!!

 

再补充:

刚问了下以前的同事,MSSQL的空间是多大:答复:200M!

OH。。My ..God!!

 

目前又恢复到Access版本,在提交入口和计数器入口增加了两个lock,但愿一切平安!!!

 

目前秋色园正式恢复写数据操作,欢迎大伙继续访问。

版权声明:本文原创发表于博客园,作者为路过秋天,原文链接:

http://www.cnblogs.com/cyq1162/archive/2011/03/14/1983112.html

时间: 2024-09-16 15:06:28

随说秋色园从Access升迁到MSSQL过程的相关文章

秋色园QBlog V2.5 后台管理系统源码发布下载

题外话: 上周时本来是计划本周一要发布,不过计划不如变化快.   由于周六下午发布了 秋式开源团队,欢迎您的加入! 的相关文章,瞬时有大量爱好.NET开源激情者加入,光聊天,就折腾了我不少时间.   再加上秋色园QBlog的恶劣的硬件条件,网友的并发操作,让秋色园有点承受不住.还有临时花了2小时加表增加了分组表单及其它文章的发布,基本都相当的忙碌.   周日晚上,打算从Access升迁到MSSQL,夜里开始写:随说秋色园从Access升迁到MSSQL过程.   写完2点多只好先入睡,经过一个不眠

秋色园Blog 博客系列索引

中文简介: 秋色园是CYQBlog(简称QBlog)的官方站点,由路过秋天创建,基于cyqdata数据层框架开发的支持多用户.多语言.多数据库(access,mssql,oracle).多皮肤.目录级url等功能强大的博客系统   英文简介: Autumn Park is QBlog the official site, created by the passing autumn, based on the framework developed cyqdata data layer suppo

Access优已成忧,一年后,还是离开了秋色园了

从上个月起,秋色园QBlog的数据库,已经从access+sqlite变更为sql2000+sqlite,从此,access离开了秋色园的怀抱.   该走的还是走了,秋色园在用Access一年多后,目前对本人来说,已优无可优,甚到为之担忧的地步,终于还是离开了.   下面让我们简单回顾一下秋色园与Access恩怨情仇(太久没写文章,不习惯写长文了):   恩:还记得最早秋色园使用Access,是由于秋色园是寄在朋友的godaddy的虚拟子目录下,那时候还没咋认识sqlite,因此access是最

秋色园QBlog技术原理解析:性能优化篇:access的并发极限及超级分库分散并发方案(十六)

上节回顾:   上节 秋色园QBlog技术原理解析:性能优化篇:数据库文章表分表及分库减压方案(十五) 中, 介绍了 秋色园QBlog 在性能优化方面,从技术的优化手段,开始步入数据库设计优化,并从数据的使用情况上进行了分析,从而将文章内容进行分离,得到新的分表,由于内容比较大,进而分了库,达到一种基础减压.   本节内容:   本节将介绍秋色园 QBlog 的Super分库方案,以及何以如此Super分库的原因.   描述说明:   在进行上了上节的分库方案后,虽然感觉一度秋色园QBlog的访

秋色园QBlog技术原理解析:性能优化篇:字节、缓存、并发(十二)

文章回顾: 1: 秋色园QBlog技术原理解析:开篇:整体认识(一) --介绍整体文件夹和文件的作用 2: 秋色园QBlog技术原理解析:认识整站处理流程(二) --介绍秋色园业务处理流程 3: 秋色园QBlog技术原理解析:UrlRewrite之无后缀URL原理(三) --介绍如何实现无后缀URL 4: 秋色园QBlog技术原理解析:UrlRewrite之URL重定向体系(四) --介绍URL如何定位到处理程序 5: 秋色园QBlog技术原理解析:Module之页面基类设计(五) --介绍创建

CYQ.Data 数据框架 V3.0 版本 开放源码下载有[CYQ.Blog(秋色园QBlog) 完全开放所有源码]

本次开放源码,长话短说:   1:本次开放CYQ.Data数据框架 V3.0版本,包含QBlog强大的XmlHelper源码,相关更新记录在底部. 2:CYQ.Blog(秋色园QBlog) 重新开放免费下载,加上本次开放的CYQ.Data 组件源码,秋色园QBlog V1.0已完全开放了所有源码. 3:CYQ.Blog(秋色园QBlog) 基本上对个人使用免费,对企业采用宇宙最强武器"攞你命3000". 4:CYQ.Data 数据框架对个人使用也提供了免费获得商业授权的方式,具体详见源

秋色园QBlog技术原理解析:性能优化篇:用户和文章计数器方案(十七)

上节概要:   上节 秋色园QBlog技术原理解析:性能优化篇:access的并发极限及分库分散并发方案(十六) 中, 介绍了 Access的并发上限,及从某种程度上 秋色园QBlog 针对并发上限进行了多个数据的划分,从而最大并发上限从64提升到64*N(个数据库),虽然总和的最大并发值是上升了,但是单个库的最大值并没有变化,或者说单个表的最大并发值没有发生变化,上限仍是64. 于是,对于频繁产生更新操作的访问计数器(用户表及文章表),是该进入优化的方案了.   本节概要:   本节将介绍秋色

秋色园QBlog技术原理解析:性能优化篇:数据库文章表分表及分库减压方案(十五)

文章回顾: 1: 秋色园QBlog技术原理解析:开篇:整体认识(一) --介绍整体文件夹和文件的作用 2: 秋色园QBlog技术原理解析:认识整站处理流程(二) --介绍秋色园业务处理流程 3: 秋色园QBlog技术原理解析:UrlRewrite之无后缀URL原理(三) --介绍如何实现无后缀URL 4: 秋色园QBlog技术原理解析:UrlRewrite之URL重定向体系(四) --介绍URL如何定位到处理程序 5: 秋色园QBlog技术原理解析:Module之页面基类设计(五) --介绍创建

秋色园CPU高温优化-两天两夜吐血失败经验总结

前言:   前N天,一直在优化 秋色园 ,仍然纠结于access数据库锁问题,因为一旦被锁,只在网站涉及到读取数据库,基本上就不用打开了,下场仅有重启IIS.   为了解决这个并发锁问题,我是用心良苦,频繁出招,这些留下到"秋色园技术原理解析 系列"里写了.   过程:   这几天,对 秋色园 首页进程了极致优化,完全避开了Access数据库操作,利用Cookie+文本外置+后台线程,完全可以不理会数据库打开首页了,首页不用担心锁问题了.   经过重重优化,这几天没再发access锁住