MySQL服务器的最大并发连接数是16384。
受服务器配置,及网络环境等制约,实际服务器支持的并发连接数会小一些。主要决定因素有:
1、服务器CPU及内存的配置。
2、网络的带宽。互联网连接中上行带宽的影响尤为明显。
扩展资料:
优化数据库结构:
组织数据库的schema、表和字段以降低I/O的开销,将相关项保存在一起,并提前规划,以便随着数据量的增长,性能可以保持较高的水平。
设计数据表应尽量使其占用的空间最小化,表的主键应尽可能短。·对于InnoDB表,主键所在的列在每个辅助索引条目中都是可复制的,因此如果有很多辅助索引,那么一个短的主键可以节省大量空间。
仅创建需要改进查询性能的索引。索引有助于检索,但是会增加插入和更新 *** 作的执行时间。
InnoDB的ChangeBuffering特性:
InnoDB提供了changebuffering的配置,可减少维护辅助索引所需的磁盘I/O。大规模的数据库可能会遇到大量的表 *** 作和大量的I/O,以保证辅助索引保持最新。当相关页面不在缓冲池里面时,InnoDB的changebuffer将会更改缓存到辅助索引条目。
从而避免因不能立即从磁盘读取页面而导致耗时的I/O *** 作。当页面被加载到缓冲池时,缓冲的更改将被合并,更新的页面之后会刷新到磁盘。这样做可提高性能,适用于MySQL55及更高版本。
参考资料来源:百度百科-MySQL数据库
以下为个人理解,仅供参考:
1、会话可以创建多个事务
比如:使用客端连接数据库,这样你就可以执行很多个事务了
2、一个事务只能由一个会话产生
在数据库里的事务,如果在执行的SQL都是由会话发起的,哪怕是自动执行的JOB也是由系统会话发起的
3、一个事务可能会产生一个或多个线程
比如RMAN备份,是可以创建多个线程可加快备份速度
4、一个线程在同一时间内只能执行一个事务
而一个线程,在没结束当前事务是无法释放资源来执行第二个事务
看看是不是这些?
服务器名
SELECT @@serverName
数据缓冲区命中率
SELECT(CAST(SUM(CASE LTRIM(RTRIM(counter_name))
WHEN 'Buffer cache hit ratio' THEN CAST(cntr_value AS INTEGER)
ELSE NULL END) AS FLOAT) /
CAST(SUM(CASE LTRIM(RTRIM(counter_name))
WHEN 'Buffer cache hit ratio base' THEN CAST(cntr_value AS INTEGER)
ELSE NULL END) AS FLOAT)) 100 AS BufferCacheHitRatio
FROM sysdm_os_performance_counters
WHERE LTRIM(RTRIM([object_name])) LIKE '%:Buffer Manager'
AND [counter_name] LIKE 'Buffer Cache Hit Ratio%'
可用缓存数
select sum(entries_count - entries_in_use_count) from sysdm_os_memory_cache_counters
用户连接数
select count() from syssysprocesses
锁总数
select count() from sysdm_tran_locks
进程锁总数
用户锁数
允许的最大连接数
SELECT @@MAX_CONNECTIONS
工作线程数
数据库动态内存占用
select from sysdm_os_memory_clerks
mysql连接表
1。通过线程的互斥来同步 *** 作数据库
2。数据库采用事务处理表中的数据
3。采用共享方式打开数据库,不是以独占方式打开数据库
建立一个mysql连接表加上一个临界区,表结点是这样的(mysqlcon,bool),根据实际情况定大小。我用的是10个连接。
当要进行mysql *** 作时,就从表中取出一个闲置的mysql连接,并把bool量改为true,使用完后改成false,临界区的做用是保障一个mysql连接一次只能被一个线程使用。
以mysql为数据库写的一个粗陋的demo,你参考一下,希望不会因为代码过多被百度吞了——
import javasqlConnection;import javasqlDriverManager;
import javasqlPreparedStatement;
import javasqlResultSet;
import javasqlSQLException;
import javautilArrayList;
import javautilList;
public class Test {
public static void main(String[] args) {
allotThread();
}
/
将100条数据分成10份并启动10个线程分别 *** 作
/
public static void allotThread() {
List<String[]> datas = buildDatas();
for (int i=0; i<100; i+=10) {
List<String[]> tenDatas = datassubList(i, i + 10);
insertData(tenDatas);
}
}
/
创建100条模拟数据
@return
/
public static List<String[]> buildDatas() {
List<String[]> datas = new ArrayList<String[]>();
for (int i=0; i<100; i++) {
String[] data = {"id " + i, "name " + i};
datasadd(data);
}
return datas;
}
/
启动线程进行数据插入 *** 作
@param tenDatas
/
public static void insertData(final List<String[]> tenDatas) {
new Thread(new Runnable() {
public void run() {
String sql = "insert into testtable (id, name) values (, )";
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = getConnection();
connsetAutoCommit(false);
pstmt = getPstmt(conn, sql);
for (String[] data : tenDatas) {
pstmtsetString(1, data[0]);
pstmtsetString(2, data[1]);
pstmtaddBatch();
}
pstmtexecuteBatch();
conncommit();
connsetAutoCommit(true);
} catch (SQLException e) {
eprintStackTrace();
rollback(conn);
} catch (ClassNotFoundException e) {
eprintStackTrace();
} finally {
close(pstmt);
close(conn);
}
}
})start();
}
public static Connection getConnection() throws SQLException, ClassNotFoundException {
ClassforName("commysqljdbcDriver");
String dbUrl = "jdbc:mysql://localhost/testuseUnicode=true&characterEncoding=UTF-8";
Connection conn = DriverManagergetConnection(dbUrl, "root", "tooeasy");
return conn;
}
public static PreparedStatement getPstmt(Connection conn, String sql) throws SQLException, ClassNotFoundException {
PreparedStatement pstmt = connprepareStatement(sql);
return pstmt;
}
public static void rollback(Connection conn) {
try {
if (null != conn) {
connrollback();
}
} catch (SQLException e) {
eprintStackTrace();
}
}
public static void close(Connection conn) {
try {
if (null != conn) {
connclose();
}
} catch (SQLException e) {
eprintStackTrace();
}
}
public static void close(PreparedStatement pstmt) {
try {
if (null != pstmt) {
pstmtclose();
}
} catch (SQLException e) {
eprintStackTrace();
}
}
public static void close(ResultSet rs) {
try {
if (null != rs) {
rsclose();
}
} catch (SQLException e) {
eprintStackTrace();
}
}
}
//将数据库中的数据条数分段
public void division(){
//获取要导入的总的数据条数
String sql3="SELECT count() FROM [CMD][dbo][mycopy1]";
try {
pss=consprepareStatement(sql3);
rss=pssexecuteQuery();
while(rssnext()){
Systemoutprintln("总记录条数:"+rssgetInt(1));
sum=rssgetInt(1);
}
//每30000条记录作为一个分割点
if(sum>=30000){
n=sum/30000;
residue=sum%30000;
}else{
residue=sum;
}
Systemoutprintln(n+" "+residue);
} catch (SQLException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
}
线程类
public MyThread(int start,int end) {
thisend=end;
thisstart=start;
Systemoutprintln("处理掉余数");
try {
Systemoutprintln("--------"+ThreadcurrentThread()getName()+"------------");
ClassforName(SQLSERVERDRIVER);
Systemoutprintln("加载sqlserver驱动");
cons = DriverManagergetConnection(CONTENTS,UNS,UPS);
stas = conscreateStatement();
Systemoutprintln("连接SQLServer数据库成功!!");
Systemoutprintln("加载mysql驱动");
ClassforName(MYSQLDRIVER);
con = DriverManagergetConnection(CONTENT,UN,UP);
sta = concreateStatement();
// 关闭事务自动提交
consetAutoCommit(false);
Systemoutprintln("连接mysql数据库成功!!");
} catch (Exception e) {
eprintStackTrace();
}
// TODO Auto-generated constructor stub
}
public ArrayList<Member> getAll(){
Member member;
String sql1="select from (select row_number() over (order by pmcode) as rowNum," +
" from [CMD][dbo][mycopy1]) as t where rowNum between "+start+" and "+end;
try {
Systemoutprintln("正在获取数据");
allmembers=new ArrayList();
rss=stasexecuteQuery(sql1);
while(rssnext()){
member=new Member();
membersetAddress1(rssgetString("address1"));
membersetBnpoints(rssgetString("bnpoints"));
membersetDbno(rssgetString("dbno"));
membersetExpiry(rssgetString("expiry"));
membersetHispoints(rssgetString("hispoints"));
membersetKypoints(rssgetString("kypoints"));
membersetLevels(rssgetString("levels"));
membersetNames(rssgetString("names"));
membersetPmcode(rssgetString("pmcode"));
membersetRemark(rssgetString("remark"));
membersetSex(rssgetString("sex"));
membersetTelephone(rssgetString("telephone"));
membersetWxno(rssgetString("wxno"));
membersetPmdate(rssgetString("pmdate"));
allmembersadd(member);
// Systemoutprintln(membergetNames());
}
Systemoutprintln("成功获取sqlserver数据库数据!");
return allmembers;
} catch (SQLException e) {
// TODO Auto-generated catch block
Systemoutprintln("获取sqlserver数据库数据发送异常!");
eprintStackTrace();
}
try {
rssclose();
stasclose();
} catch (SQLException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
return null;
}
public void inputAll(ArrayList<Member> allmembers){
Systemoutprintln("开始向mysql中写入");
String sql2="insert into testmycopy2 values (,,,,,,,,,,,,,)";
try {
ps=conprepareStatement(sql2);
Systemoutprintln("-------------------------等待写入数据条数: "+allmemberssize());
for(int i=0;i<allmemberssize();i++){
pssetString(1, allmembersget(i)getPmcode());
pssetString(2, allmembersget(i)getNames());
//Systemoutprintln(allmembersget(i)getNames());
pssetString(3, allmembersget(i)getSex());
pssetString(4, allmembersget(i)getTelephone());
pssetString(5, allmembersget(i)getAddress1());
pssetString(6, allmembersget(i)getPmdate());
pssetString(7, allmembersget(i)getExpiry());
pssetString(8, allmembersget(i)getLevels());
pssetString(9, allmembersget(i)getDbno());
pssetString(10, allmembersget(i)getHispoints());
pssetString(11, allmembersget(i)getBnpoints());
pssetString(12, allmembersget(i)getKypoints());
pssetString(13, allmembersget(i)getWxno());
pssetString(14, allmembersget(i)getRemark());
//插入命令列表
//psaddBatch();
psexecuteUpdate();
}
//psexecuteBatch();
concommit();
psclose();
conclose();
thisflag=false;
Systemoutprintln(ThreadcurrentThread()getName()+"--->OK");
} catch (SQLException e) {
// TODO Auto-generated catch block
Systemoutprintln("向mysql中更新数据时发生异常!");
eprintStackTrace();
}
}
@Override
public void run() {
// TODO Auto-generated method stub
while(true&&flag){
thisinputAll(getAll());
}
}
以上就是关于mysql数据库最大能支持多少并发量全部的内容,包括:mysql数据库最大能支持多少并发量、数据库中事务、会话、线程这几个概念是什么关系、如何获得SQLSERVER2005的这些数据指标等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)