Überprüfungsumgebung Red Hat Enterprise Linux release 8.1 (Ootpa) Tomcat-9.0.30 PostgreSQL 10.7 Aurora PostgreSQL 10.6
Ausführungsergebnis des folgenden Programms. Durchschnittswert von 10 Läufen. Die Anzahl der Datensätze für die Overhead-Überprüfung beträgt mehrere. Lokal unter Linux: 541 Mikrosekunden Lokal im Computer (VM-Host-Windows und VM-Gast-Linux): 988 Mikrosekunden Heimmaschine (Yokohama), AWS Region Tokio (Aurora PostgreSQL) Remote: 7304 Mikrosekunden
Im Fall von Oracle ist die Abrufgröße des JDBC-Treibers klein (Standard 10), daher ist eine Optimierung erforderlich. Sie sollte entsprechend den Antwortanforderungen der Anwendung erhöht werden. In einer bestimmten Umgebung waren es 38 ms (Ping-Antwortzeit) für On-Pres und AWS, daher sollte der Fall berücksichtigt werden, in dem der Protokoll-Overhead entsprechend groß ist.
package test;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.annotation.Resource;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
/**
* Servlet implementation class TestServlet
*/
@WebServlet("/TestServlet")
public class TestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Resource(name = "jdbc/postgres")
private DataSource ds;
/**
* @see HttpServlet#HttpServlet()
*/
public TestServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
Connection con = null;
long start = 0;
long end = 0;
try {
con = ds.getConnection();
//start = System.currentTimeMillis();
start = System.nanoTime();
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("select id from test2");
int recordCount = 0;
while (rs.next()) {
out.println(rs.getInt("id"));
recordCount++;
}
out.println("<br>");
out.print("recordCount:");
out.println(recordCount);
out.println("<br>");
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
con.close();
end = System.nanoTime();
} catch (SQLException e) {
e.printStackTrace();
}
}
out.print("time:");
out.print((end - start)/1000);
out.println(" micro sec");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
Zusätzliche Hinweise zum Überprüfen des tatsächlichen Computers direkt von Tomcat in Eclipse Platzieren Sie context.xml unter WebContent / META-INF.
<Context>
<!-- Default set of monitored resources. If one of these changes, the -->
<!-- web application will be reloaded. -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->
<Manager className="org.apache.catalina.session.PersistentManager"
maxIdleBackup="1"
minIdleSwap="0"
maxIdleSwap="0"
processExpiresFrequency="1"
saveOnRestart='true'
>
<Store className="org.apache.catalina.session.JDBCStore"
connectionURL="jdbc:postgresql://localhost:5432/tomcat?user=postgres&password=postgres"
driverName="org.postgresql.Driver"
sessionAppCol="app_name"
sessionDataCol="session_data"
sessionIdCol="session_id"
sessionLastAccessedCol="last_access"
sessionMaxInactiveCol="max_inactive"
sessionTable="tomcat_sessions"
sessionValidCol="valid_session"
/>
</Manager>
<Resource name="jdbc/postgres" auth="Container"
type="javax.sql.DataSource" driverClassName="org.postgresql.Driver"
url="jdbc:postgresql://192.168.80.131:5432/test"
username="postgres" password="postgres" maxTotal="20" maxIdle="10" maxWaitMillis="-1"/>
</Context>
Für Aurora die folgenden Endpunkte (nach Überprüfung der Operation gelöscht) url="jdbc:postgresql://database-1-instance-1.cofxoo0c8wlr.ap-northeast-1.rds.amazonaws.com:5432/postgres"