mysql数据库最大能支持多少并发量

mysql数据库最大能支持多少并发量,第1张

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的这些数据指标等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存