Vì sao cần đóng kết nối tới database

Mysql_close() được dùng để đóng kết nối đến cơ sở dữ liệu đã mở trước đó.

Điều này rất cần thiết vì nó giúp giảm tải xử lý của database, hiểu đơn giản thế này một người truy cập tới website của bạn và website của bạn có kết nối database và điều đó đồng nghĩa với việc sẽ có ít nhất một kết nối database được tạo, vậy 100 người sẽ có 100 kết nối, và giả sử dụng trong đó có 99 người không sử dụng nữa nhưng kết nối vẫn còn hiệu lực thì điều này có nghĩa là thay vì database phải xử lý chỉ có 1 kết nối mà nó phải xử lý 100 kết nối. Vì sao ít người dùng đầu tiên vì hiệu quả mang lại của hàm này rất khó thấy trong các trường hợp thông thường, trên thực tế khi người dùng không còn sử dụng nữa thì sau một khoảng thời gian ngắn kết nối này sẽ tự động đóng, thứ hai vì ít người có thể nhìn thấy được vấn đề nếu không có dịp tiếp xúc hoặc làm việc với lượng dữ liệu lớn thì sẽ thấy việc mở hoặc đóng một conneciton kịp thời và chính xác sẽ tiết kiệm được rất nhiều tài nguyên cho hệ thống cũng như tốc độ xử lý của hệ thống, vì thế hàm này rất cần thiết khi bạn quản lý tài nguyên và tốc độ thực thi của hệ thống hay của website.

Góc trao đổi, hỏi đáp của ngôn ngữ Visual Basic 6 và Visual Basic Script

Điều hành viên: tungblt

Vì sao cần đóng kết nối tới database

bocapit Thành viên tâm huyết
Vì sao cần đóng kết nối tới database
Bài viết: 394 Ngày tham gia: Thứ 5 02/10/2008 6:34 am Đến từ: C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\ Has thanked: 1 time Been thanked: 44 times

Gửi bài by bocapit » Thứ 3 24/02/2009 5:16 pm

Các bạn ơi ai đã từng làm qua các phần mền quản lý rồi cho mình hỏi. Mình có viết 1 ứng dụng quản lý điểm cho nhiều người dùng (dùng vb.net):

Mình ADO.net để kết nối đến SQL 200 để lấy và thao tác trên dữ liệu. Mình không cnn.close() trong quá trình làm việc cho đến khi ứng dụng được đóng (closing) thì mình mới cho cnn.close() không biết làm như thế có ảnh hưởng gì tới tài nguyên hệ thống và ảnh hưởng tới server hay không? có nên sau mỗi lần sử dụng xong lại cnn.close(), khi nào dùng thì cnn.open() lại.

Các bạn đã làm ứng dụng rồi thì cho mình biết phương án nào tốt hơn. Còn nữa, là khi fill cho DataSet, mình không xóa đi sau khi dùng vậy có ảnh hướng tới tài nguyên không? cái mình dang lo là server chạy không nỗi nếu nhiều người cùng làm việc, cái thứ hai lo nhất là tốc độ làm việc của ứng dụng mình viêt ? Các bạn cho mình lời khuyên đi !

Thank!

Vì sao cần đóng kết nối tới database
Không có định mệnh, mọi chuyện do chính ta tạo nên.
Vì sao cần đóng kết nối tới database

Vì sao cần đóng kết nối tới database

xuanquy_th Guru
Vì sao cần đóng kết nối tới database
Bài viết: 803 Ngày tham gia: Thứ 3 05/08/2008 9:15 pm Đến từ: Thanh Hoá Has thanked: 1 time Been thanked: 10 times Tiếp xúc:

Gửi bài by xuanquy_th » Thứ 5 26/02/2009 10:22 am

Mình đang làm phần mền quản
Theo mình biết thì Cnn xẽ tự động đóng nếu trong một khoảng thời gian rài mà bạn không sử dụng đến nó. (Cái này mình đã gặp) nên mình nghĩ không cần thiết phải đóng Cnn mà chỉ cần mổi lần sử dụng Cnn thỉ kiểm tra xem nó có đóng hay không, nếu đóng thì lại mở lại (Đây là ý kiến của mình thôi)

Mã: Chọn tất cả

Còn nữa, là khi fill cho DataSet, mình không xóa đi sau khi dùng vậy có ảnh hướng tới tài nguyên không?

Cái này thì mình nghĩ là chắc chắn là bị ảnh hưởng.
Nhưng bạn không cần fai bận tâm. Vì để chạy được PM thì yêu cầu máy cũng fai có cấu hình tốt (Nhất là chạy mạng).
Vì sao cần đóng kết nối tới database

Khi Chúa Trời đóng cánh cửa này lại, Ngài sẽ mở một cánh cửa khác cho ta.
Nhưng ta thường nhìn quá lâu vào cánh cửa đã đóng nên không thấy được có một cánh cửa khác đang mở ra cho ta!!!

Vì sao cần đóng kết nối tới database

NoBi Quản trị
Vì sao cần đóng kết nối tới database
Bài viết: 972 Ngày tham gia: Thứ 3 18/03/2008 1:22 pm Đến từ: Sài Gòn Has thanked: 57 times Been thanked: 67 times Tiếp xúc:

Gửi bài by NoBi » Thứ 5 26/02/2009 11:15 am

Theo tôi thì nên đóng lại liền sau khi xử lý xong 1 tác vụ nào đó. Nên viết nó thành 1 hàm như vầy: cnn.Open() ....... xử lý cnn.Close()

Vì ngay tại thời điểm đó có rất nhiều người muốn kết nối tới csdl. Nếu cứ đợi time out của server thì trong thời gian chờ đó, sẽ có rất nhiều người không truy cập được vào csdl nếu nó đã hết giới hạn cho phép kết nối.

Vì sao cần đóng kết nối tới database

Vì sao cần đóng kết nối tới database

thuocthoigian Thành viên danh dự
Vì sao cần đóng kết nối tới database
Bài viết: 167 Ngày tham gia: Thứ 2 31/07/2006 2:07 pm Đến từ: Minh Lộ - Thanh Hóa Tiếp xúc:

Website Facebook Google+ Skype

Gửi bài by thuocthoigian » Thứ 5 26/02/2009 3:00 pm

NoBi đã viết:Theo tôi thì nên đóng lại liền sau khi xử lý xong 1 tác vụ nào đó. Nên viết nó thành 1 hàm như vầy: cnn.Open() ....... xử lý cnn.Close()

Vì ngay tại thời điểm đó có rất nhiều người muốn kết nối tới csdl. Nếu cứ đợi time out của server thì trong thời gian chờ đó, sẽ có rất nhiều người không truy cập được vào csdl nếu nó đã hết giới hạn cho phép kết nối.

Cho mình hỏi thêm tí ( phần bôi đỏ) . bạn có thể nói rõ hơn về giới hạn cho phép kết nối ko?

ps: mình cũng chuyên viết pm quản lý nhưng do tự học cả nên 1 số cái cũng ko rõ

Sự tưởng tượng còn quan trọng hơn kiến thức! (A.Einstein)

Vì sao cần đóng kết nối tới database

thanhlv Thành viên tích cực
Vì sao cần đóng kết nối tới database
Bài viết: 124 Ngày tham gia: Thứ 7 18/11/2006 11:49 pm Đến từ: Hà Nội Tiếp xúc:

Gửi bài by thanhlv » Thứ 5 26/02/2009 3:50 pm

thuocthoigian đã viết:

NoBi đã viết:Theo tôi thì nên đóng lại liền sau khi xử lý xong 1 tác vụ nào đó. Nên viết nó thành 1 hàm như vầy: cnn.Open() ....... xử lý cnn.Close()

Vì ngay tại thời điểm đó có rất nhiều người muốn kết nối tới csdl. Nếu cứ đợi time out của server thì trong thời gian chờ đó, sẽ có rất nhiều người không truy cập được vào csdl nếu nó đã hết giới hạn cho phép kết nối.

Cho mình hỏi thêm tí ( phần bôi đỏ) . bạn có thể nói rõ hơn về giới hạn cho phép kết nối ko?

ps: mình cũng chuyên viết pm quản lý nhưng do tự học cả nên 1 số cái cũng ko rõ

sql server 2000 hỗ trợ 32,767 kết nối đến 1 instance trong 1 thời điểm, tối đa 16 instance trên 1 computer
=> sql server 2000 cho phép số lượng kết nối tối đa trong 1 thời điểm là 32,767 x 16 = 524,272

Sống ở trên đời cần có một Tấm Lòng để lúc đói còn có chỗ mà nhét Thức Ăn
http://giaiphapit.vn

Vì sao cần đóng kết nối tới database

truongphu VIP
Vì sao cần đóng kết nối tới database
Bài viết: 4785 Ngày tham gia: Chủ nhật 04/11/2007 10:57 am Đến từ: Cam Đức, Khánh hòa Has thanked: 14 times Been thanked: 531 times

Gửi bài by truongphu » Thứ 5 26/02/2009 4:02 pm

Cần phân biệt 2 khái niệm "time out" 1- Vì NoBi có nhắc đến "time out của server" thì đây là là thời gian sống của MS Internet Explorer khi kết nối đến một Web site Default của time out là 60 phút. Khi hết thời gian nầy, nếu vẫn không không kết nối được, sẽ hiện bảng: Message 1 Microsoft Internet Explorer error 10060 connection timed out. Message 2 Internet Explorer cannot open the Internet site <Web address>. The operation timed out. Message 3 The page cannot be displayed. Cannot find server or DNS Error. Mà thực tế thì chỉ sau khoảng 1 đến vài phút, nếu không kết nối được thì Message 3 The page cannot be displayed. Cannot find server or DNS Error. đã hiện ra 2- Khi tạo một kết nối đến CSDL (Dim Con as New ADODB.Connection) thì Con nếu không khai báo, default của time out sẽ là 30 giây Ta có thể khai báo time out nầy như sau: Con.ConnectionTimeout = 40 Với Defaut là 30 giây là quá đủ để các ADODB.Recordset làm việc sau đó nên property nầy ít ai khai báo. Đương nhiên, 30 giây trôi qua thì Con sẽ tự ngắt, nhường CSDL lại cho người khác, chúng sẽ chờ đợi lệnh làm việc khác. Vậy nên, khỏi cần ra lệnh Con.Close. Chỉ khi thực sự thoát khỏi chương trình thì Con.Close để giải phóng bộ nhớ.

(Đương nhiên đây là ý kiến riêng của tôi)

o0o--truongphu--o0o ......... Ghé thăm:

Chuyện Linh Tinh

Vì sao cần đóng kết nối tới database

bocapit Thành viên tâm huyết
Vì sao cần đóng kết nối tới database
Bài viết: 394 Ngày tham gia: Thứ 5 02/10/2008 6:34 am Đến từ: C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\ Has thanked: 1 time Been thanked: 44 times

Gửi bài by bocapit » Thứ 6 06/03/2009 9:18 pm

Theo mình được biêt la nếu dùng ADO.net thì vấn đề kết nối sẽ tự dộng ngắt sau khi không dùng tới, khi nào dùng tới thi sẽ tự động kết nối với CSDL lại Về mặt lý thuyết là vậy nhưng trong thực hành thi mình không rỏ lắm ! Mình củng như các bạn khác tự học tự viết nên củng có nhiều vấn đề không rỏ lắm

Cảm ơn các bạn đã quan tâm

Vì sao cần đóng kết nối tới database
Không có định mệnh, mọi chuyện do chính ta tạo nên.
Vì sao cần đóng kết nối tới database

daybvm Bài viết: 6 Ngày tham gia: Thứ 5 18/09/2008 10:56 pm Đến từ: TP Mỹ Tho - Tiền Giang

Gửi bài by daybvm » Thứ 6 02/07/2010 11:17 am

Lệnh Connect với 1 CSDL SQL thì khi nào cần tới truy xuất Recordset thì Connect.open nếu không thì Connect.close (mặc nhiên không cần thiết phải close nó), nhưng để đảm bảo thì gọi close cho chắc.
VD: khi thực hiện lệnh Update recordset thì ta gọi Connect.open xong rồi thì ta gọi Connect.close. thì chắc chắn đúng không! nếu ta thấy ciệc gọi đi gọi lại nhiều lần thì ta nên tạo một sub trong modul hoặc class gì đó rồi đặt tên nghe "kêu" cho dễ nhớ, lúc viết 1 sự kiện xử lý ta gọi nó vào để thực kiện thì nhẹ nhàng hơn. Chúc quí vị vui khỏe, nếu tôi nói lặp đi lặp lại hay trùng ý với ai đó thì tôi nghĩ cũng là ý tán thành cùng với ý kiến đó.

Vì sao cần đóng kết nối tới database

thuongbat Guru
Vì sao cần đóng kết nối tới database
Bài viết: 346 Ngày tham gia: Chủ nhật 27/04/2008 10:11 am Has thanked: 4 times Been thanked: 79 times

Gửi bài by thuongbat » Thứ 5 26/08/2010 10:38 am

Với SQL Server thì mình chưa từng gặp hiện tượng ko mở được kết nối vào CSDL do chương trình đã chiếm hết số kết nối tối đa (có thể những chương trình do mình làm mở không nhiều kết nối vào CSDL cùng 1 lúc) nhưng với Access thì đã từng gặp. Chương trình có khoảng 4 thread chạy đồng thời và kết nối liên tục vào CSDL. Thỉnh thoảng hay bị lỗi ko kết nối được. Mình nghĩ với chương trình quản lý thì chủ yếu là xử lý đơn luồng nên việc đóng kết nối vào CSDL ngay sau khi sử dụng cũng ko cần thiết lắm. Cho dù bạn có nhiều điểm kết nối thì khả năng các điểm đó kết nối đồng thời cũng là hiếm. Nhưng theo ý mình, phần kết nối CSDL nên đưa ra thành 1 lớp độc lập. Chương trình chính ko nên quản lý trực tiếp kết nối, vì vậy nó không cần quan tâm đến việc đóng kết nối khi nào. Việc đóng, mở kết nối để cho lớp kết nối dữ liệu tự làm. VÍ dụ:

  1. Dim _connectionString As String

  2. Sub New(ByVal ConnectionString As String)

  3.   _connectionString = ConnectionString

  4. Public Function ExecuteNoneSQL(Byval sqlString As String) As Boolean

  5. Dim cnxn As SqlConnection = New SqlConnection(_connectionString)

  6. Dim cmd As SqlCommand  = Nothing

  7. Dim Ret As Boolean = False

  8.   cmd = New SqlCommand(sqlString,cnxn)

  9.   ret = (cmd.ExecuteNoneSql()>0)

  10.   If cnxn IsNot Nothing Then cnxn.Close()

Như vậy thì Connection luôn luôn đóng lai sau khi thực hiện 1 câu Sql nào đó.

Rượu gặp tri kỷ ngàn chén thiếu.
Chuyện người không hợp nửa câu thừa.