Oracle单实例的最大并发测试

Oracle的最大并发数由PROCESSES和SESSIONS决定,归根结底由操作系统和硬件配置决定。

根据对Tomcat、Druid、Oracle三者的与并发相关的参数进行了解,结合经验和网上的部分说法后,得出如下数据:

  1. Tomcat的单机并发最大线程数为500到700。
  2. Druid数据库连接池的推荐配置最大并发数(maxActive)为20.
  3. Oralce的最大进程数(PROCESSES)为300,最大SESSIONS为300 * 1.5 + 22 = 477 (这个公式对应Oracle 11g版本)
  4. Nginx在windows上的最大并发数为1024,在linux为8192.(受限于文件系统的最大文件打开数)。

基于以上数据,进行推测:

数据库最大并发 = 300
数据库可以支持的连接池个数 = 477 / 20 = 23
23个连接池对应23个Tomcat,可以支撑的线程数:
23 * 500 = 11500个线程

也就是,数据库按照PROCESSES=300的配置来的话,可以压榨的极限是11500并发。这里补充一点,对于Spring框架的Web应用来说,Spring会用一个线程来处理一次用户请求(注意是一次请求,不是一次会话),处理完一次请求后,线程即回到等待状态,等待下一次请求调用。

所以11500个并发并不代变11500个用户,具体要看实际场景中一个用户的单位时间访问量。


下面来验证以上推测。

环境准备:
  • 服务器:

    • 4核8G5M带宽阿里云服务器 * 3

    • 4核4G5M带宽阿里云服务器 * 2

  • 测试客户端:

    • 4核8G笔记本
  • Tomcat线程池配置

<think>我们正在讨论的是在Oracle单实例数据库中搭建测试环境并导入生产环境的dmp文件。用户的需求是模拟生产环境用于CRS系统升级测试,但这里没有使用RAC环境,而是单实例。根据引用内容,我们可以总结以下步骤:1.在测试数据库服务器上创建新的Oracle用户(操作系统用户和数据库用户)。2.复制生产环境的相关目录(如ORACLE_HOME,但注意单实例下可能不需要复制整个ORACLE_HOME,而是安装相同版本的Oracle软件)。3.将生产环境导出的dmp文件导入到测试环境的数据库中。 但是,根据引用[2]提到,我们可以采用数据泵(expdp/impdp)而不生成dmp文件直接导入到另一个库,但用户这里已经有了dmp文件,所以我们还是按照传统方式。另外,引用[3]提到版本兼容性问题,需要注意测试环境的Oracle版本要等于或高于生产环境版本,以避免导入问题。具体步骤:一、创建操作系统用户(如果还没有)在测试环境服务器上创建与生产环境相同的操作系统用户(如oracle),并设置相应的组和权限。二、安装Oracle数据库软件(单实例)安装与生产环境相同版本的Oracle数据库软件(单实例)。注意设置ORACLE_BASE和ORACLE_HOME。三、创建数据库实例在测试环境创建一个新的数据库实例(可以与生产环境同名,但建议不同名以避免混淆)。四、创建数据库用户(用于导入dmp文件)在测试环境的数据库中创建一个新用户(与生产环境要导入的用户同名或不同名,若不同名则导入时需做映射)。五、导入dmp文件使用imp或impdp工具将dmp文件导入到测试环境的数据库中。 详细步骤:1.创建操作系统用户(如果测试环境没有)以root用户执行:```bashgroupaddoinstallgroupadddbauseradd-goinstall-Gdbaoraclepasswd oracle#设置密码``` 2.安装Oracle软件按照生产环境的版本安装Oracle数据库软件(单实例)。具体安装步骤略。3.创建数据库实例使用dbca(数据库配置助手)创建数据库实例,注意字符集等参数要与生产环境一致。4.创建数据库用户(如果导入的dmp文件包含用户信息,则可以在导入时自动创建,但需要确保该用户有足够的权限)通常,我们导入dmp文件时,如果dmp文件是全库导出,则包含用户信息。如果是按用户导出,则导入前需要先创建相应用户并赋予权限。例如,我们要导入一个用户`scott`的数据,那么先在测试库创建该用户并授权:```sqlCREATE USERscottIDENTIFIED BYtiger;GRANT CONNECT,RESOURCETO scott;```5.导入dmp文件将生产环境的dmp文件传输到测试环境的服务器上,然后使用imp或impdp导入。使用imp(传统导入):```bashimpsystem/password@testdb FILE=export.dmpFROMUSER=prod_user TOUSER=test_userLOG=import.log```其中,`FROMUSER`指定导出文件中的源用户,`TOUSER`指定要导入的目标用户。或者使用数据泵impdp(如果dmp文件是数据泵导出的):```bashimpdpsystem/password@testdbDIRECTORY=dpump_dir DUMPFILE=export.dmpREMAP_SCHEMA=prod_user:test_user LOGFILE=import.log```这里需要先创建一个目录对象:```sqlCREATEDIRECTORYdpump_dir AS'/path/to/dumpfile';GRANTREAD,WRITEON DIRECTORY dpump_dirTO system;```然后将dmp文件放在`/path/to/dumpfile`目录下。注意事项:-版本兼容性:测试环境的Oracle版本要等于或高于生产环境(引用[3])。-字符集:测试环境的数据库字符集要与生产环境一致,否则导入可能失败或出现乱码。 -表空间:如果dmp文件中包含表空间信息,而测试环境没有相应的表空间,需要提前创建或使用`REMAP_TABLESPACE`参数重映射。 根据引用[4]提到的快速迁移,我们也可以考虑使用传输表空间等更高效的方法,但这里用户要求用dmp文件。最后,验证导入的数据是否正确。 相关问题: 1.如何解决Oracle导入dmp文件时的字符集问题?2.使用imp和impdp导入数据的主要区别是什么? 3.在Oracle单实例中,如何创建与生产环境相同的表空间结构?</think>### 在Oracle单实例数据库中搭建测试环境并导入dmp文件 #### 一、环境准备 1. **创建操作系统用户** 在测试服务器创建专用用户(如`oracle_test`),避免与生产环境冲突: ```bash sudo groupadd oinstall sudo groupadd dba sudo useradd -g oinstall -G dba oracle_test sudo passwd oracle_test # 设置密码 ``` 2. **配置目录权限** 创建Oracle基础目录并授权: ```bash sudo mkdir -p /u01/app/oracle_test sudo chown -R oracle_test:oinstall /u01/app/oracle_test sudo chmod -R 775 /u01/app/oracle_test ``` 3. **安装Oracle软件** 安装与生产环境**相同版本**的Oracle数据库软件(单实例): ```bash # 以oracle_test用户运行安装程序 ./runInstaller ``` 选择"仅安装软件",不创建数据库实例[^3]。 #### 二、创建数据库实例 1. **初始化数据库** 使用DBCA创建新实例: ```bash dbca -silent -createDatabase \ -templateName General_Purpose.dbc \ -gdbname TESTDB -sid TESTDB \ -characterSet AL32UTF8 # 必须与生产环境一致 ``` 2. **创建目标用户** 在SQL*Plus中创建导入用户: ```sql CREATE USER prod_clone IDENTIFIED BY "密码"; GRANT CONNECT, RESOURCE, UNLIMITED TABLESPACE TO prod_clone; ``` #### 三、导入dmp文件 1. **传输dmp文件** 将生产环境的dmp文件复制到测试服务器: ```bash scp production:/path/to/export.dmp /u01/app/oracle_test/dpump/ ``` 2. **创建目录对象** ```sql CREATE DIRECTORY dpump_dir AS '/u01/app/oracle_test/dpump'; GRANT READ, WRITE ON DIRECTORY dpump_dir TO prod_clone; ``` 3. **执行导入** ```bash impdp system/密码@TESTDB \ DIRECTORY=dpump_dir \ DUMPFILE=export.dmp \ REMAP_SCHEMA=生产用户:prod_clone # 用户映射 LOGFILE=import.log ``` **关键参数说明**: - `REMAP_TABLESPACE`:若表空间不同需重映射 - `VERSION=12.2.0`:当高版本导向低版本时指定兼容性[^3] #### 四、验证与优化 1. **数据校验** ```sql -- 检查对象数量 SELECT object_type, COUNT(*) FROM dba_objects WHERE owner='PROD_CLONE' GROUP BY object_type; -- 抽样验证数据 SELECT COUNT(*) FROM prod_clone.关键表; ``` 2. **性能优化** - 大文件导入:添加`PARALLEL=4`参数加速 - 减少日志:`TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y` - 跳过统计信息:`EXCLUDE=STATISTICS`(导入后重新收集) #### 五、环境隔离配置 1. **网络隔离** ```bash # 修改listener.ora避免端口冲突 LISTENER_TEST = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = testhost)(PORT = 1522)) ) ) ``` 2. **内存限制** 在`initTESTDB.ora`中设置: ```ini memory_target=2G # 测试环境降低内存分配 processes=200 # 减少并发进程数 ``` **注意事项**: 1. 版本兼容性:测试环境Oracle版本 ≥ 生产环境版本[^3] 2. 字符集验证:`SELECT * FROM nls_database_parameters` 3. 空间预估:dmp文件大小需预留3倍空间(数据+索引+临时段) 4. 导入中断处理:使用`TABLE_EXISTS_ACTION=APPEND`续传 > **替代方案**:直接跨库导入(无需dmp文件) > 若网络可达,可用数据泵直连生产库导入测试环境[^2]: > ```bash > impdp system/测试密码@TESTDB \ > NETWORK_LINK=生产库DBLINK名 \ > SCHEMAS=生产用户 \ > REMAP_SCHEMA=生产用户:prod_clone > ``` 通过以上步骤,即可在单实例环境中完整复现生产数据,支持CRS升级测试。导入后建议使用DBMS_STATS重新收集统计信息以保证执行计划准确性[^4]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值