如何查看SQL SERVER数据库当前连接数

如何查看SQL SERVER数据库当前连接数,第1张

1通过管理工具

开始->管理工具->性能(或者是运行里面输入

mmc)然后通过添加计数器添加

SQL

的常用统计

然后在下面列出的项目里面选择用户连接就可以时时查询到数据库连接数了。不过此方法的话需要有访问那台计算机的权限,就是要通过Windows账户登陆进去才可以添加此计数器。

2通过系统表查询

SELECT  FROM

[Master][dbo][SYSPROCESSES] WHERE [DBID] IN ( SELECT

[DBID]

FROM

[Master][dbo][SYSDATABASES]

WHERE

NAME='DBName'

)

DBName

是需要查看的数据库,然后查询出来的行数,就是当前的连接数。不过里面还有一些别的状态可以做参考用。

例如:连到master这个数据库写如下语句

select  from sysprocesses where dbid in (select dbid from sysdatabases where name='MyDatabase')

将所有连接MyDatabase这个数据库的连接记录都求出来。

sysprocesses这个表记录所以连接到SQL

SERVER数据库的连接。

3通过系统的存储过程来查找

SP_WHO 'UserName'

UserName

是当然登陆Sql的用户名,一般程序里面都会使用一个UserName来登陆SQL这样通过这个用户名就能查看到此用户名登陆之后占用的连接了。

如果不写UserName,那么返回的就是所有的连接。

我以前认为oracle processes参数只是规定进程数的上限,随便设置多大都可以,于是设置了个一千万,结果重启数据库的时候发现启动不了。

其实processes设置的值还是会占用oracle内存的,设置过大的话,你sga中没有足够的内存分配,数据库便无法启动。

你可以自己实验对比下,

当你设置不同processes值时候,shared_pool中的processes池,大小也会随之变化

select from v$sgastat where pool='shared pool' and name='processes';

MAX_UTILIZATION代表数据库自上次启动以来达到的最大值,LIMIT_VALUE代表设置的最大值

select resource_name,MAX_UTILIZATION,LIMIT_VALUE from v$resource_limit where resource_name in ('processes','sessions');

 最近有些客户提出想对SQL Server的连接数进行一些监听。总结了以下一些方法:

1、获取SQL Server允许同时用户连接的最大数

SELECT @@MAX_CONNECTIONS

2、获取当前指定数据库的连接信息

SELECT FROM masterdbosysprocesses WHERE dbid IN

(

SELECT dbid FROM masterdbosysdatabases

WHERE NAME='YourDataBaseName'

)

--根据需要更改YourDataBaseName

SELECT FROM masterdbosysprocesses WHERE DB_NAME(dbid) = 'YourDataBaseName'

3、获取当前SQL服务器所有的连接详细信息

SELECT FROM sysprocesses

以上查询结果包含了:系统进程和用户进程。

如果只是想查用户进程的话则需采用下面的方法

4、获取自上次启动 SQL Server服务 以来连接或试图连接的次数

SELECT @@CONNECTIONS

这个刚开始会有点误解,认为是当前SQL Server服务器当前所有的连接数。需要重点注意。

SQL> select count() from v$session #当前的连接数 SQL> Select count() from v$session where status='ACTIVE' #并发连接数 SQL> select value from v$parameter where name = 'processes' --数据库允许的最大连接数 SQL> show parameter processes #最大连接 SQL> select username,count(username) from v$session where username is not null group by username; #查看不同用户的连接数 希望能帮到你

查询数据库当前进程的连接数:

select count() from v$process;

查看数据库当前会话的连接数:

select count() from v$session;

查看数据库的并发连接数:

select count() from v$session where status='ACTIVE';

查看当前数据库建立的会话情况: 

select sid,serial#,username,program,machine,status from v$session;

查询数据库允许的最大连接数:

select value from v$parameter where name = 'processes';

或者:

show parameter processes;

查询所有数据库的连接数

selectschemaname,count()fromv$sessiongroupbyschemaname;

查询终端用户使用数据库的连接情况。

selectosuser,schemaname,count()fromv$sessiongroupbyschemaname,osuser;

#查看当前不为空的连接

select  from v$session where username is not null

#查看不同用户的连接数

select username,count(username) from v$session where username is not null group by username

在使用MySQL数据库的时候,经常会遇到这么一个问题,就是“Can not connect to MySQL server Too many connections”-mysql 1040错误,这是因为访问MySQL且还未释放的连接数目已经达到MySQL的上限。

通常,mysql的最大连接数默认是100, 最大可以达到16384。

在Windows下常用的有两种方式修改最大连接数。

第一种:命令行修改。

>mysql -uuser -ppassword(命令行登录MySQL)

mysql>show variables like 'max_connections';(查可以看当前的最大连接数)

msyql>set global max_connections=1000;(设置最大连接数为1000,可以再次查看是否设置成功)

mysql>exit(推出)

这种方式有个问题,就是设置的最大连接数只在mysql当前服务进程有效,一旦mysql重启,又会恢复到初始状态。

因为mysql启动后的初始化工作是从其配置文件中读取数据的,而这种方式没有对其配置文件做更改。

第二种:修改配置文件。

这 种方式说来很简单,只要修改MySQL配置文件myini 或 myf的参数max_connections,将其改为max_connections=1000,然后重启MySQL即可。

但是有一点最难的就是myini这个文件在哪找。

通常有两种可能,一个是在安装目录下(这是比较理想的情况),另一种是在数据文件的目录下,安装的时候如果没有人为改变目录的话,一般就在C:/ProgramData/MySQL往下的目录下。

与连接数相关的几个参数:

在修改最大连接数的时候会有这样一个疑问—这个值是不是越大越好,或者设置为多大才合适?这个参数的大小要综合很多因素来考虑,比如使用的平台所支持的线程库数量(windows只能支持到2048)、服务器的配置(特别是内存大小)、每个连接占用资源(内存和负载)的多少、系统需要的响应时间等。

可以在global或session范围内修改这个参数。

连接数的增加会带来很多连锁反应,需要在实际中避免由此引发的负面影响。

首先看一下MySQL的状态:

mysql> status;

--------------

mysql Ver 1414 Distrib 5515, for Win32 (x86)

Connection id: 1

Current database:

Current user: root@localhost

SSL: Not in use

Using delimiter: ;

Server version: 5515 MySQL munity Server (GPL)

Protocol version: 10

Connection: localhost via TCP/IP

Server characterset: utf8

Db characterset: utf8

Client characterset: gbk

Conn characterset: gbk

TCP port: 3306

Uptime: 1 hour 3 min 27 sec

Threads: 12 Questions: 18 Slow queries: 10 Opens: 33 Flush tables: 5 Open tab

les: 34 Queries per second avg: 6256

--------------

Open tables:34,即当前数据库打开表的数量是34个,注意这个34并不是实际的34个表,因为MySQL是多线程的系统,几个不同的并发连接可能打开同一个表,这就需要为不同的连接session分配独立的内存空间来存储这些信息以避免冲突。

因此连接数的增加会导致MySQL需要的文件描述符数目的增加。

另外对于MyISAM表,还会建立一个共享的索引文件描述符。

在MySQL数据库层面,有几个系统参数决定了可同时打开的表的数量和要使用的文件描述符,那就是table_open_cache、max_tmp_tables和open_files_limit。

mysql> show variables like 'table_open%';

+------------------+-------+

| Variable_name | Value |

+------------------+-------+

| table_open_cache | 256 |

+------------------+-------+

1 row in set (000 sec)

table_open_cache:256,这就是说所有的MySQL线程一共能同时打开256个表,我们可以搜集系统的打开表的数量的历史记录和这个参数来对比,决定是否要增加这个参数的大小。

查看当前的打开表的数目(Open tables)可用上边提到过的status命令,另外可以直接查询这个系统变量的值:

mysql> show status like 'open_tables';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| Open_tables | 3 |

+---------------+-------+

1 row in set (000 sec)

Open_tables就是当前打开表的数目,通过flush tables命令可以关闭当前打开的表。

这个值如果过大,并且如果没有经常的执行flush tables命令,可以考虑增加table_open_cache参数的大小。

接下来看max_tmp_tables:

mysql> show variables like 'max_tmp%';

+----------------+-------+

| Variable_name | Value |

+----------------+-------+

| max_tmp_tables | 32 |

+----------------+-------+

1 row in set (000 sec)

max_tmp_tables:32即单个客户端连接能打开的临时表数目。

查看当前已打开的临时表的信息:

mysql> show global status like '%tmp%table%';

+-------------------------+-------+

| Variable_name | Value |

+-------------------------+-------+

| Created_tmp_disk_tables | 0 |

| Created_tmp_tables | 11 |

+-------------------------+-------+

2 rows in set (000 sec)

根据这两个值可以判断临时表的创建位置,一般选取BLOB和TEXT列、Group by 和 Distinct语句的数据量超过512 bytes,或者union的时候select某列的数据超过512 bytes的时候,就直接在磁盘上创建临时表了,另外内存中的临时表变大的时候,也可能被MySQL自动转移到磁盘上(由tmp_table_size和max_heap_table_size参数决定)。

增加table_open_cache或max_tmp_tables 参数的大小后,从 *** 作系统的角度看,mysqld进程需要使用的文件描述符的个数就要相应的增加,这个是由open_files_limit参数控制的。

mysql> show variables like 'open_files%';

+------------------+-------+

| Variable_name | Value |

+------------------+-------+

| open_files_limit | 2670 |

+------------------+-------+

1 row in set (000 sec)

但是这个参数是OS限制的,所以我们设定的值并不一定总是生效。

如果OS限制MySQL不能修改这个值,那么置为0。

如果是专用的MySQL服务器上,这个值一般要设置的尽量大,就是设为没有报Too many open files错误的最大值,这样就能一劳永逸了。

当 *** 作系统无法分配足够的文件描述符的时候,mysqld进程会在错误日志里记录警告信息。

相应的,有两个状态变量记录了当前和历史的文件打开信息:

mysql> show global status like '%open%file%';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| Open_files | 0 |

| Opened_files | 76 |

+---------------+-------+

2 rows in set (000 sec)

MySQL为每个连接分配线程来处理,可以通过threads_connected参数查看当前分配的线程数量:

mysql> show status like '%thread%';

+------------------------------------------+-------+

| Variable_name | Value |

+------------------------------------------+-------+

| Delayed_insert_threads | 0 |

| Performance_schema_thread_classes_lost | 0 |

| Performance_schema_thread_instances_lost | 0 |

| Slow_launch_threads | 0 |

| Threads_cached | 0 |

| Threads_connected | 1 |

| Threads_created | 1 |

| Threads_running | 1 |

+------------------------------------------+-------+

8 rows in set (000 sec)

比较threads_connected参数和前面提到的max_connections参数,也可以作为目前的系统负载的参照,决定是否需要修改连接数。

查看每个线程的详细信息:mysql>show processlist;对影响系统运行的线程:kill connection|query threadid的命令杀死。

以上就是关于如何查看SQL SERVER数据库当前连接数全部的内容,包括:如何查看SQL SERVER数据库当前连接数、怎样确定oracle数据库的最大连接数、vertica数据库怎么查看连接数是否已经达到最大值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/sjk/9321654.html

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

发表评论

登录后才能评论

评论列表(0条)

保存