asp.net 开发的网站,sql2000的数据库,部署到服务器上,有三四十个用户登陆就出现问题了,数据库堵塞。

asp.net 开发的网站,sql2000的数据库,部署到服务器上,有三四十个用户登陆就出现问题了,数据库堵塞。,第1张

首先要明确,阻塞是正常的,死锁是要避免的。
下列方法有助于最大限度地降低死锁:
按同一顺序访问对象。
避免事务中的用户交互。
保持事务简短并在一个批处理中。
使用低隔离级别。
使用绑定连接。
按同一顺序访问对象
如果所有并发事务按同一顺序访问对象,则发生死锁的可能性会降低。例如,如果两个并发事务获得 Supplier 表上的锁,然后获得 Part 表上的锁,则在其中一个事务完成之前,另一个事务被阻塞在 Supplier 表上。第一个事务提交或回滚后,第二个事务继续进行。不发生死锁。将存储过程用于所有的数据修改可以标准化访问对象的顺序。
避免事务中的用户交互
避免编写包含用户交互的事务,因为运行没有用户交互的批处理的速度要远远快于用户手动响应查询的速度,例如答复应用程序请求参数的提示。例如,如果事务正在等待用户输入,而用户去吃午餐了或者甚至回家过周末了,则用户将此事务挂起使之不能完成。这样将降低系统的吞吐量,因为事务持有的任何锁只有在事务提交或回滚时才会释放。即使不出现死锁的情况,访问同一资源的其它事务也会被阻塞,等待该事务完成。
保持事务简短并在一个批处理中
在同一数据库中并发执行多个需要长时间运行的事务时通常发生死锁。事务运行时间越长,其持有排它锁或更新锁的时间也就越长,从而堵塞了其它活动并可能导致死锁。
保持事务在一个批处理中,可以最小化事务的网络通信往返量,减少完成事务可能的延迟并释放锁。
使用低隔离级别
确定事务是否能在更低的隔离级别上运行。执行提交读允许事务读取另一个事务已读取(未修改)的数据,而不必等待第一个事务完成。使用较低的隔离级别(例如提交读)而不使用较高的隔离级别(例如可串行读)可以缩短持有共享锁的时间,从而降低了锁定争夺。
使用绑定连接
使用绑定连接使同一应用程序所打开的两个或多个连接可以相互合作。次级连接所获得的任何锁可以象由主连接获得的锁那样持有,反之亦然,因此不会相互阻塞。

国内的WindowsAzure很快就要正式商用了,许多小伙伴们也有计划把现有的网站迁移到WindowsAzure上去。但是国内相关的中文文档还是比较缺乏的,所以今天我就写了个超详细教程来教大家如何把ASPNET网站部署到WindowsAzure上。demo用的网站是带有数据库的,并且最后还会演示如何绑定一个com域名到网站上。

我写的内容基本都是在Channel9上看来的,并且自己亲自实践过许多次的。大家现在阅读的这个博客就是用同样的方法部署到WindowsAzure上的。所以不必担心文章坑爹。我的博客不像国内的许多网站那样,发表的内容都没自己测过,非常没有责任心。

下面进入正题。

1部署数据库

首先,假设我们的网站已经开发好了。这是一个带有一个SQLServer数据库的ASPNET网站。第一步我们要做的,是把数据库部署到WindowsAzure上去。

你需要的工具:SQLServer2012ManagementStudio。注意,仅仅要求SSMS为2012版,你的数据库引擎版本没有限制。

11在WindowsAzure上创建一个数据库服务器

在SQLDATABASES页面中,点击SERVERS选项卡进入SQL服务器列表页面。这里我已经有个服务器了,但是我还是教大家怎么创建一个新的。

12点击页面最下方工具栏上的ADD按钮

13在d出的对话框中输入SQL服务器的用户名和密码

REGION选择ChinaNorth,这是有原因的,为了省钱,稍后会解释。最下面的勾“ALLOWWINDOWSAZURESERVICESTOACCESSTHESERVER”一定要勾选,意思是允许你Azure上其他服务访问这个数据库,而不用给他们一个个在防火墙中指定IP地址。我们稍后要创建的网站也属于“AZURESERVICES”的范畴,所以一定要勾选这个选项。

14大约4秒后,数据库创建完成。

服务器的名字是Azure随机分配的,不能改。这里我们的服务器叫yfb2xnprey

15接下来,在CONFIGURE选项卡中,我们要把自己当前的IP地址加到防火墙规则里。

这仅仅是为了迁移数据库使用一次。用完以后为了安全建议大家删掉这个IP。IP地址支持单个的,也支持地址段,大家可以根据自己需要设置。

16接下来,我们就要迁移数据库了。

打开SSMS2012,按图中的格式填写服务器名称和你之前设置的用户名、密码。注意,用户名后面一定要有一个“@服务器名称”!

17成功连接到SQLAzure服务器

因为是刚刚创建的新服务器,所以里面一个数据库都木有。

18接下来,用SSMS直接向Azure迁移数据库。

连接到你本地服务器。在你要迁移的数据库上点右键,选择Tasks-DeployDatabasetoSQLAzure

在向导中再次点击Connect按钮,连接到SQLAzure服务器。然后输入新数据库的名称。“EditionofSQLAzure”根据自己需要选择,一般小型网站选择Web,1GB是最省钱的。然后点击Next开始部署。

部署完成后你能看到成功的结果

现在,回到WindowsAzure管理平台中,也能够看见迁移后数据库了。

19准备新的连接字符串

点击刚才创建的“Infodiaos”数据库,打开数据库管理页面,然后点击“ViewSQLDatabaseconnectionstrings”

在d出的窗口中,复制ADONET的连接字符串。

接下来,在你的ASPNET项目里,打开WebReleaseConfig文件。如图所示,把connectionStrings节点根据自己网站的配置还掉。这个WebReleaseConfig文件里的配置会在用“Release”模式编译网站的时候自动把最终的webconfig换掉。“xdt:Transform="Replace"”的意思是在编译网站时候把connectionStrings节点整个换掉。

至此,数据库部分就搞定了。

2部署网站

21在WindowsAzure上创建新网站

在WindowsAzure管理平台最下方的工具栏上,点击"New"

选择Compute,Website,CustomCreate。这是为了防止QUICKCREATE把我们不想要的设置默认撸进去。

在d出的对话框中,输入网站在azure里的二级域名。如果文本框旁边出现绿色的对勾,就表示这个域名是可以用的。当然,这不是我们最终的域名。稍后会教大家绑定自己的域名上去。

REGION里面,要选择ChinaNorth,也就是要和数据库在同一个地理位置,这样的话,同一个数据中心里的传输是不计费的。那为什么刚才数据库一定要选ChinaNorth而不是ChinaEast呢?因为目前中国的网站服务TMD只能选North

DATABASE里面啥都不要选,我们稍后要手动搞这部分。

网站创建完成后,在websites的列表里就能看见正在运行的空站点了。目前是Free模式的,这个是相当有限制的模式,不能绑定域名,稍后我们会更改。

22将数据库链接到网站

为了方便管理,我们通常将数据库链接到网站中。注意,这里的链接仅仅是对于Azure管理平台来说的,并不是程序里的数据库连接。

切换到LINKEDRESOURCES页面,点击“LINKARESOURCE”。

然后选择“LinkanExistingResource”

选择“SQLDatabase”

选择我们的数据库,并且确认用户名和密码

完成连接后,应该能看到数据库已经被成功挂在网站下了。

23从VisualStudio部署网站

最方便的部署方式是通过VisualStudio,直接WebDeploy到服务器上。当然,你也可以手动拷贝文件到Azure提供的FTP上。不过我这里只演示WebDeploy。FTP大家可以自己开荒。

在网站的DASHBOARD右侧,点击“Downloadthepublishprofile”。下载VS用的发布文件。

然后回到VisualStudio,在网站项目上点击右键,选择“Publish”,然后导入刚才下载的Profile文件。

之后,点击“ValidateConnection”验证配置是否正确。如果正确,会看见一个绿色的√。

然后在Settings页面里,选择“Release”模式,这样才会把之前在WebReleaseConfig里配置的连接字符串换进去。

同时,建议勾选“Removeadditionalfilesatdestination”,这样会删除Azure默认网站的文件,完全干净的部署我们的网站。

最后,确认发布的文件后,点击“Publish”发布网站。发布完成后,VS会自动打开目标网站的地址。这是Azure免费网站的二级域名。我们马上要把它换成自己的域名。

24绑定域名

如果你自己申请了域名(cn垃圾域名除外),可以很方便的和AzureWebsite绑定。

首先,Free模式的网站是不支持自定义域名的,所以我们要在SCALE里把网站设置成"SHARED"或“STANDARD”,当然,这两种就要收费了。

之后,在CONFIGURE选项卡中,你就能看到绑定域名的地方了。

点击“managedomains”。

同时,我们要在域名的DNS设置里加两个CNAME记录。这个因人而异,我是DNSPOD的域名解析,

等待DNS记录生效后,切回到WindowsAzure的管理界面就可以完成添加了。

绑定后的网站就是这样了,可以使用自己的域名,看上去非常的牛逼,而且国际域名不用备案哦。

存储过程(StoredProcedure)是一组为了完成特定功能的结构化查询语言(StructuredQueryLanguage,SQL)语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

存储过程是SQL语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件地执行,它具有强大的编程功能。存储过程的优点存储过程位于数据库服务器中,是一个SQL语句的集合,可包含一个或多个SQL语句。

存储过程是利用数据库服务器所提供的Transact−SQL语言编写的程序。存储过程在创建时即在服务器上进行编译,所以执行起来比单个SQL语句快,总的来说具有以下几个方面的优点。

((1)存储过程增强了SQL语言的功能和灵活性。存储过程可以用来控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。

(2)存储过程是标准组件,允许编程。存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码也毫无影响。

(3)存储过程能实现较快的执行速度。如果某一 *** 作包含大量的Transact−SQL代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的。在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的Transact−SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些。

(4)存储过程能够减少网络传输流量。针对同一个数据库对象的 *** 作(如查询、修改),如果这一 *** 作所涉及的Transact−SQL语句被组织成存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而大大增加了网络流量并降低了网络负载。

(5)存储过程可被作为一种安全机制来充分利用。系统管理员通过执行某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全。

您好,提问者:
    1、存储到数据库,建议。

2、如果不涉及数据库,也可以用流存储到一个文本文件中。

import javaio;
public class Demo{
    public static void main(String[] args) throws IOException{
        BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\xxtxt"));
        bwwrite("这里要接受存储的数据"); //try一下吧
        bwnewLine(); //换行
        bwflush();
        bwclose(); //这里有异常,try一下吧
        
        //读取文件
        BufferedReader br = new BufferedReader(new FileReader("D:\\xxtxt"));
        String str = null;
        while((str=brreadLine())!=null){
            Systemoutprintln(str);//这里是读取到的数据,一行一行读取
        }
    }
}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13396025.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-28
下一篇 2023-07-28

发表评论

登录后才能评论

评论列表(0条)

保存