Partially working PDB support. Some bugs left to fix.
Showing
8 changed files
with
108 additions
and
66 deletions
... | @@ -43,21 +43,25 @@ if(request.getParameter("action") != null) { | ... | @@ -43,21 +43,25 @@ if(request.getParameter("action") != null) { |
43 | <% } %> | 43 | <% } %> |
44 | 44 | ||
45 | <script type="text/javascript"> | 45 | <script type="text/javascript"> |
46 | function getData(type, input) { | 46 | function getData(type, input, pdb) { |
47 | // Update the data | 47 | // Update the data |
48 | var pdbAdd = ""; | ||
49 | if(pdb != "" && pdb != null) pdbAdd = "&pdbName=" + pdb; | ||
48 | var client1 = new XMLHttpRequest(); | 50 | var client1 = new XMLHttpRequest(); |
49 | client1.onreadystatechange = dataHandler; | 51 | client1.onreadystatechange = dataHandler; |
50 | client1.open("GET", "/" + type + "/getData?age=14&connectionString=" + encodeURIComponent(input)); | 52 | client1.open("GET", "/" + type + "/getData?age=14" + pdbAdd + "&connectionString=" + encodeURIComponent(input)); |
51 | client1.setRequestHeader('Cache-Control', 'no-cache'); | 53 | client1.setRequestHeader('Cache-Control', 'no-cache'); |
52 | client1.setRequestHeader('Pragma', 'no-cache'); | 54 | client1.setRequestHeader('Pragma', 'no-cache'); |
53 | client1.send(); | 55 | client1.send(); |
54 | } | 56 | } |
55 | 57 | ||
56 | function getMetrics(type, input) { | 58 | function getMetrics(type, input, pdb) { |
57 | // Get the metrics | 59 | // Get the metrics |
60 | var pdbAdd = ""; | ||
61 | if(pdb != "" && pdb != null) pdbAdd = "pdbName=" + pdb + "&"; | ||
58 | var client2 = new XMLHttpRequest(); | 62 | var client2 = new XMLHttpRequest(); |
59 | client2.onreadystatechange = metricsHandler; | 63 | client2.onreadystatechange = metricsHandler; |
60 | client2.open("GET", "/" + type + "/getMetrics?connectionString=" + encodeURIComponent(input)); | 64 | client2.open("GET", "/" + type + "/getMetrics?" + pdbAdd + "connectionString=" + encodeURIComponent(input)); |
61 | client2.setRequestHeader('Cache-Control', 'no-cache'); | 65 | client2.setRequestHeader('Cache-Control', 'no-cache'); |
62 | client2.setRequestHeader('Pragma', 'no-cache'); | 66 | client2.setRequestHeader('Pragma', 'no-cache'); |
63 | client2.send(); | 67 | client2.send(); |
... | @@ -117,8 +121,9 @@ function dataHandler() { | ... | @@ -117,8 +121,9 @@ function dataHandler() { |
117 | <input type="submit" name="action" value="remove" > | 121 | <input type="submit" name="action" value="remove" > |
118 | <input type="hidden" name="omconstr" value="<%= mon.getConString() %>"> | 122 | <input type="hidden" name="omconstr" value="<%= mon.getConString() %>"> |
119 | <input type="button" value="graph" onClick="window.open('/viewOraMon.html?<%= URLEncoder.encode(mon.getConString(), "UTF-8") %>')"> | 123 | <input type="button" value="graph" onClick="window.open('/viewOraMon.html?<%= URLEncoder.encode(mon.getConString(), "UTF-8") %>')"> |
120 | <input id="getDataButton" type="button" value="getData" onClick="getData('OraMonREST', '<%= mon.getConString() %>')"> | 124 | <input id="getDataButton" type="button" value="getData" onClick="getData('OraMonREST', '<%= mon.getConString() %>',this.form.pdbName.value)"> |
121 | <input id="getMetricsButton" type="button" value="getMetrics" onClick="getMetrics('OraMonREST', '<%= mon.getConString() %>')"> | 125 | <input id="getMetricsButton" type="button" value="getMetrics" onClick="getMetrics('OraMonREST', '<%= mon.getConString() %>',this.form.pdbName.value)"> |
126 | <input id="pdbName" name="pdbName" size="10"> | ||
122 | </form> | 127 | </form> |
123 | </td> | 128 | </td> |
124 | </tr> | 129 | </tr> | ... | ... |
No preview for this file type
No preview for this file type
No preview for this file type
... | @@ -124,10 +124,16 @@ public class OraMonRESTgetData extends HttpServlet { | ... | @@ -124,10 +124,16 @@ public class OraMonRESTgetData extends HttpServlet { |
124 | monitor = Registry.findOrCreate(conStr, usrStr, pwdStr); | 124 | monitor = Registry.findOrCreate(conStr, usrStr, pwdStr); |
125 | } | 125 | } |
126 | 126 | ||
127 | String pdbName = null; | ||
128 | if(request.getParameterMap().containsKey("pdbName")) { | ||
129 | String temp = request.getParameter("pdbName"); | ||
130 | if (!temp.isEmpty()) pdbName = temp; | ||
131 | } | ||
132 | |||
127 | if(monitor != null) { | 133 | if(monitor != null) { |
128 | // Call getData() | 134 | // Call getData() |
129 | boolean didUpdate = monitor.getData(age); | 135 | boolean didUpdate = monitor.getData(age,pdbName); |
130 | String dbName = monitor.getFriendlyName(); | 136 | String dbName = monitor.getFriendlyName(pdbName); |
131 | if(didUpdate) { | 137 | if(didUpdate) { |
132 | sb.append("{\"error\":false,\"msg\":\"Sucessfully collected data on '" + dbName + "'\""); | 138 | sb.append("{\"error\":false,\"msg\":\"Sucessfully collected data on '" + dbName + "'\""); |
133 | sb.append(",\"ms\":"+monitor.getLastRTms()+"}"); | 139 | sb.append(",\"ms\":"+monitor.getLastRTms()+"}"); | ... | ... |
1 | 1 | ||
2 | 2 | ||
3 | import java.io.IOException; | 3 | import java.io.IOException; |
4 | import java.util.ArrayList; | ||
5 | 4 | ||
6 | import javax.servlet.ServletException; | 5 | import javax.servlet.ServletException; |
7 | import javax.servlet.annotation.WebServlet; | 6 | import javax.servlet.annotation.WebServlet; |
... | @@ -32,13 +31,13 @@ public class OraMonRESTgetMetrics extends HttpServlet { | ... | @@ -32,13 +31,13 @@ public class OraMonRESTgetMetrics extends HttpServlet { |
32 | */ | 31 | */ |
33 | protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { | 32 | protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { |
34 | response.setContentType("application/json"); | 33 | response.setContentType("application/json"); |
34 | OraMon monitor = null; | ||
35 | try { | 35 | try { |
36 | StringBuffer sb = new StringBuffer(); | 36 | StringBuffer sb = new StringBuffer(); |
37 | ArrayList<OraMon> list = Registry.getList(); | ||
38 | 37 | ||
39 | if(request.getParameterMap().containsKey("connectionString")) { | 38 | if(request.getParameterMap().containsKey("connectionString")) { |
40 | // We have a connection string, find the monitor and report only on that monitor | 39 | // We have a connection string, find the monitor and report only on that monitor |
41 | OraMon monitor = null; | 40 | |
42 | if(request.getParameter("connectionString").startsWith("jdbc:oracle")) { | 41 | if(request.getParameter("connectionString").startsWith("jdbc:oracle")) { |
43 | // Full con string | 42 | // Full con string |
44 | String[] shortConArray = request.getParameter("connectionString").split("@"); | 43 | String[] shortConArray = request.getParameter("connectionString").split("@"); |
... | @@ -107,59 +106,60 @@ public class OraMonRESTgetMetrics extends HttpServlet { | ... | @@ -107,59 +106,60 @@ public class OraMonRESTgetMetrics extends HttpServlet { |
107 | conStr = "jdbc:oracle:thin:@" + conStrParamArray[0] + ":" + conStrParamArray[1] + ":" + conStrParamArray[2]; | 106 | conStr = "jdbc:oracle:thin:@" + conStrParamArray[0] + ":" + conStrParamArray[1] + ":" + conStrParamArray[2]; |
108 | } | 107 | } |
109 | monitor = Registry.find(conStr); | 108 | monitor = Registry.find(conStr); |
110 | if(monitor == null) { | ||
111 | // Not found, create it | ||
112 | response.setStatus(HttpServletResponse.SC_NOT_FOUND); | ||
113 | response.getWriter().println("{\"error\":true,\"msg\":\"Can not find a monitor with connection string "+request.getParameter("connectionString")+"\"}"); | ||
114 | return; | ||
115 | } | ||
116 | } | 109 | } |
117 | |||
118 | // Set this monitor to the only one on the list | ||
119 | list = new ArrayList<OraMon>(); | ||
120 | list.add(monitor); | ||
121 | } | 110 | } |
122 | 111 | ||
123 | // Loop over all monitors and output a Json array with the default set of metrics | 112 | if(monitor == null) { |
113 | // Not found, response with 404 | ||
114 | response.setStatus(HttpServletResponse.SC_NOT_FOUND); | ||
115 | response.getWriter().println("{\"error\":true,\"msg\":\"Can not find a monitor with connection string "+request.getParameter("connectionString")+"\"}"); | ||
116 | return; | ||
117 | } | ||
124 | 118 | ||
125 | for (OraMon item : list) { | 119 | String pdbName = null; |
126 | sb.append("{\"name\":\"" + item.getFriendlyName() + "\",\"error\":false,\"nvarray\":"); | 120 | if(request.getParameterMap().containsKey("pdbName")) { |
127 | sb.append("["); | 121 | String temp = request.getParameter("pdbName"); |
128 | 122 | if (!temp.isEmpty()) pdbName = temp; | |
129 | |||
130 | sb.append("{\"name\":\"Cpu Usage (%)\",\"value\":" + item.getCPUPercent() + "}"); | ||
131 | sb.append(",{\"name\":\"Logical Reads (#/s)\",\"value\":" + item.getLogicalReadsPerSecond() + "}"); | ||
132 | sb.append(",{\"name\":\"Executes (#/s)\",\"value\":" + item.getPerSecondValue("execute count") + "}"); | ||
133 | sb.append(",{\"name\":\"User Calls (#/s)\",\"value\":" + item.getPerSecondValue("user calls") + "}"); | ||
134 | sb.append(",{\"name\":\"Cache Hit Ratio (%)\",\"value\":" + item.getCacheHitRatioPercent() + "}"); | ||
135 | sb.append(",{\"name\":\"Redo Size (#/s)\",\"value\":" + item.getPerSecondValue("redo size") + "}"); | ||
136 | |||
137 | sb.append(",{\"name\":\"OS Busy (%)\",\"value\":" + item.getOsBusyPercent() + "}"); | ||
138 | sb.append(",{\"name\":\"OS Load (#)\",\"value\":" + item.getOsLoad() + "}"); | ||
139 | sb.append(",{\"name\":\"OS Page In (KB/s)\",\"value\":" + item.getPerSecondValue("VM_IN_BYTES", OraMon.OSSTAT)/1024 + "}"); | ||
140 | sb.append(",{\"name\":\"OS Page Out (KB/s)\",\"value\":" + item.getPerSecondValue("VM_OUT_BYTES", OraMon.OSSTAT)/1024 + "}"); | ||
141 | sb.append(",{\"name\":\"OS Load per Cpu (#)\",\"value\":" + item.getOsLoadPerCPU() + "}"); | ||
142 | |||
143 | sb.append(",{\"name\":\"Consistent Gets (#/s)\",\"value\":" + item.getPerSecondValue("consistent gets") + "}"); | ||
144 | sb.append(",{\"name\":\"DB Block Gets (#/s)\",\"value\":" + item.getPerSecondValue("db block gets") + "}"); | ||
145 | |||
146 | sb.append(",{\"name\":\"Buffer Cache Hit Ratio (%)\",\"value\":" + item.getBufferCacheHitRatioPercent() + "}"); | ||
147 | sb.append(",{\"name\":\"DB Block Changes (#/s)\",\"value\":" + item.getPerSecondValue("db block changes") + "}"); | ||
148 | |||
149 | sb.append(",{\"name\":\"Physical Reads (#/s)\",\"value\":" + item.getPerSecondValue("physical reads") + "}"); | ||
150 | sb.append(",{\"name\":\"Physical Writes (#/s)\",\"value\":" + item.getPerSecondValue("physical writes") + "}"); | ||
151 | sb.append(",{\"name\":\"Redo Writes (#/s)\",\"value\":" + item.getPerSecondValue("redo writes") + "}"); | ||
152 | sb.append(",{\"name\":\"Non-idle Wait Time (ms/s)\",\"value\":" + item.getPerSecondValue("non-idle wait time") + "}"); | ||
153 | sb.append(",{\"name\":\"File I/O Wait Time (ms/s)\",\"value\":" + item.getPerSecondValue("file io wait time") + "}"); | ||
154 | |||
155 | sb.append(",{\"name\":\"User Commits (#/s)\",\"value\":" + item.getPerSecondValue("user commits") + "}"); | ||
156 | sb.append(",{\"name\":\"User Rollbacks (#/s)\",\"value\":" + item.getPerSecondValue("user rollbacks") + "}"); | ||
157 | sb.append(",{\"name\":\"Parse Count Total (#/s)\",\"value\":" + item.getPerSecondValue("parse count (total)") + "}"); | ||
158 | sb.append(",{\"name\":\"Parse Count Hard (#/s)\",\"value\":" + item.getPerSecondValue("parse count (hard)") + "}"); | ||
159 | sb.append(",{\"name\":\"Cpu Usage xNIWT (%)\",\"value\":" + item.getCPUPercent(true) + "}"); | ||
160 | sb.append(",{\"name\":\"Cpu Time (us/s)\",\"value\":" + item.getCPUTimePerSecond() + "}"); | ||
161 | sb.append(",{\"name\":\"Cpus (#)\",\"value\":" + item.getNumberOfCPUs() + "}"); | ||
162 | } | 123 | } |
124 | |||
125 | // Write out the monitors data | ||
126 | sb.append("{\"name\":\"" + monitor.getFriendlyName(pdbName) + "\",\"error\":false,\"nvarray\":"); | ||
127 | sb.append("["); | ||
128 | |||
129 | |||
130 | sb.append("{\"name\":\"Cpu Usage (%)\",\"value\":" + monitor.getCPUPercent(pdbName) + "}"); | ||
131 | sb.append(",{\"name\":\"Logical Reads (#/s)\",\"value\":" + monitor.getLogicalReadsPerSecond(pdbName) + "}"); | ||
132 | sb.append(",{\"name\":\"Executes (#/s)\",\"value\":" + monitor.getPerSecondValue("execute count",pdbName) + "}"); | ||
133 | sb.append(",{\"name\":\"User Calls (#/s)\",\"value\":" + monitor.getPerSecondValue("user calls",pdbName) + "}"); | ||
134 | sb.append(",{\"name\":\"Cache Hit Ratio (%)\",\"value\":" + monitor.getCacheHitRatioPercent(pdbName) + "}"); | ||
135 | sb.append(",{\"name\":\"Redo Size (#/s)\",\"value\":" + monitor.getPerSecondValue("redo size",pdbName) + "}"); | ||
136 | |||
137 | sb.append(",{\"name\":\"OS Busy (%)\",\"value\":" + monitor.getOsBusyPercent() + "}"); | ||
138 | sb.append(",{\"name\":\"OS Load (#)\",\"value\":" + monitor.getOsLoad() + "}"); | ||
139 | sb.append(",{\"name\":\"OS Page In (KB/s)\",\"value\":" + monitor.getPerSecondValue("VM_IN_BYTES", OraMon.OSSTAT)/1024 + "}"); | ||
140 | sb.append(",{\"name\":\"OS Page Out (KB/s)\",\"value\":" + monitor.getPerSecondValue("VM_OUT_BYTES", OraMon.OSSTAT)/1024 + "}"); | ||
141 | sb.append(",{\"name\":\"OS Load per Cpu (#)\",\"value\":" + monitor.getOsLoadPerCPU() + "}"); | ||
142 | |||
143 | sb.append(",{\"name\":\"Consistent Gets (#/s)\",\"value\":" + monitor.getPerSecondValue("consistent gets",pdbName) + "}"); | ||
144 | sb.append(",{\"name\":\"DB Block Gets (#/s)\",\"value\":" + monitor.getPerSecondValue("db block gets",pdbName) + "}"); | ||
145 | |||
146 | sb.append(",{\"name\":\"Buffer Cache Hit Ratio (%)\",\"value\":" + monitor.getBufferCacheHitRatioPercent(pdbName) + "}"); | ||
147 | sb.append(",{\"name\":\"DB Block Changes (#/s)\",\"value\":" + monitor.getPerSecondValue("db block changes",pdbName) + "}"); | ||
148 | |||
149 | sb.append(",{\"name\":\"Physical Reads (#/s)\",\"value\":" + monitor.getPerSecondValue("physical reads",pdbName) + "}"); | ||
150 | sb.append(",{\"name\":\"Physical Writes (#/s)\",\"value\":" + monitor.getPerSecondValue("physical writes",pdbName) + "}"); | ||
151 | sb.append(",{\"name\":\"Redo Writes (#/s)\",\"value\":" + monitor.getPerSecondValue("redo writes",pdbName) + "}"); | ||
152 | sb.append(",{\"name\":\"Non-idle Wait Time (ms/s)\",\"value\":" + monitor.getPerSecondValue("non-idle wait time",pdbName) + "}"); | ||
153 | sb.append(",{\"name\":\"File I/O Wait Time (ms/s)\",\"value\":" + monitor.getPerSecondValue("file io wait time",pdbName) + "}"); | ||
154 | |||
155 | sb.append(",{\"name\":\"User Commits (#/s)\",\"value\":" + monitor.getPerSecondValue("user commits",pdbName) + "}"); | ||
156 | sb.append(",{\"name\":\"User Rollbacks (#/s)\",\"value\":" + monitor.getPerSecondValue("user rollbacks",pdbName) + "}"); | ||
157 | sb.append(",{\"name\":\"Parse Count Total (#/s)\",\"value\":" + monitor.getPerSecondValue("parse count (total)",pdbName) + "}"); | ||
158 | sb.append(",{\"name\":\"Parse Count Hard (#/s)\",\"value\":" + monitor.getPerSecondValue("parse count (hard)",pdbName) + "}"); | ||
159 | sb.append(",{\"name\":\"Cpu Usage xNIWT (%)\",\"value\":" + monitor.getCPUPercent(true,pdbName) + "}"); | ||
160 | sb.append(",{\"name\":\"Cpu Time (us/s)\",\"value\":" + monitor.getCPUTimePerSecond(pdbName) + "}"); | ||
161 | sb.append(",{\"name\":\"Cpus (#)\",\"value\":" + monitor.getNumberOfCPUs() + "}"); | ||
162 | |||
163 | sb.append("]}"); | 163 | sb.append("]}"); |
164 | 164 | ||
165 | response.getWriter().println(sb.toString()); | 165 | response.getWriter().println(sb.toString()); | ... | ... |
... | @@ -55,4 +55,8 @@ DA1K001: 435343.22211814864 | ... | @@ -55,4 +55,8 @@ DA1K001: 435343.22211814864 |
55 | DA1K002: 9.075934239850135 | 55 | DA1K002: 9.075934239850135 |
56 | TOTAL : 435352.2980523885 | 56 | TOTAL : 435352.2980523885 |
57 | 57 | ||
58 | Här känns alla värden rätt. | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
58 | Här känns alla värden rätt. Får göra klart GUI bitarna och se hur monitorerna beteer sig under längre tid. | ||
59 | |||
60 | När jag kört ett tag i graph läget nu på en PDB via CDB, ser jag även konstiga värden på mycket annat. Cache Hit Ratio på 1200%, negativa värden på flera räknare, mm. | ||
61 | GUI delarna lirar inte riktigt heller, getMetrics ger en 500 och en NullPointer (beror på att pdbName skickas alltid, null om den inte ska användas, och det funkar | ||
62 | inte i alla metoder i OraMon.java klassen). Anger man en PDB i OraMon.jsp så blir det HTTP 0 status?? på getData och getMetrics knapparna. | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
1 | package se.lil.om; | 1 | package se.lil.om; |
2 | 2 | ||
3 | import java.sql.*; | 3 | import java.sql.*; |
4 | import java.util.ArrayList; | 4 | import java.util.HashSet; |
5 | import java.util.HashMap; | ||
6 | import java.util.Properties; | 5 | import java.util.Properties; |
7 | import java.util.concurrent.locks.Lock; | 6 | import java.util.concurrent.locks.Lock; |
8 | import java.util.concurrent.locks.ReentrantLock; | 7 | import java.util.concurrent.locks.ReentrantLock; |
... | @@ -29,10 +28,21 @@ public class OraMon { | ... | @@ -29,10 +28,21 @@ public class OraMon { |
29 | boolean getPdbs = false; | 28 | boolean getPdbs = false; |
30 | Collector colPdbSysStat = null; | 29 | Collector colPdbSysStat = null; |
31 | Collector colPdbCPU = null; | 30 | Collector colPdbCPU = null; |
31 | HashSet<String> pdbSet = null; | ||
32 | public static final String strCpuTime = " cputime"; | 32 | public static final String strCpuTime = " cputime"; |
33 | public static final String strNiwTime = " niwtime"; | 33 | public static final String strNiwTime = " niwtime"; |
34 | public static final String strSeparator = " "; | 34 | public static final String strSeparator = " "; |
35 | 35 | ||
36 | public int getNumPdbs() { | ||
37 | if(pdbSet != null) return pdbSet.size(); | ||
38 | else return 0; | ||
39 | } | ||
40 | |||
41 | public String[] getPdbArray() { | ||
42 | if(pdbSet != null) return (String[]) pdbSet.toArray(); | ||
43 | else return null; | ||
44 | } | ||
45 | |||
36 | public int getDataCalled() { | 46 | public int getDataCalled() { |
37 | return getDataCalls; | 47 | return getDataCalls; |
38 | } | 48 | } |
... | @@ -150,6 +160,10 @@ public class OraMon { | ... | @@ -150,6 +160,10 @@ public class OraMon { |
150 | return getPerSecondValue(name, table, null); | 160 | return getPerSecondValue(name, table, null); |
151 | } | 161 | } |
152 | 162 | ||
163 | public double getPerSecondValue(String name, String pdbName) throws Throwable { | ||
164 | return getPerSecondValue(name, SYSSTAT, pdbName); | ||
165 | } | ||
166 | |||
153 | public double getPerSecondValue(String name, int table, String pdbName) throws Throwable { | 167 | public double getPerSecondValue(String name, int table, String pdbName) throws Throwable { |
154 | switch (table) { | 168 | switch (table) { |
155 | case OSSTAT: | 169 | case OSSTAT: |
... | @@ -170,10 +184,19 @@ public class OraMon { | ... | @@ -170,10 +184,19 @@ public class OraMon { |
170 | } | 184 | } |
171 | 185 | ||
172 | public String getFriendlyName() { | 186 | public String getFriendlyName() { |
187 | return getFriendlyName(null); | ||
188 | } | ||
189 | |||
190 | public String getFriendlyName(String pdbName) { | ||
173 | // Returns a friendly name of the database, either the service name from con string or the database name from the instance | 191 | // Returns a friendly name of the database, either the service name from con string or the database name from the instance |
174 | getServiceName(); | 192 | getServiceName(); |
175 | if(this.serviceName != null) return this.serviceName; | 193 | if(pdbName != null) { |
176 | else return this.dbName; | 194 | if(this.serviceName != null) return this.serviceName + ":" + pdbName; |
195 | else return this.dbName + ":" + pdbName; | ||
196 | } else { | ||
197 | if(this.serviceName != null) return this.serviceName; | ||
198 | else return this.dbName; | ||
199 | } | ||
177 | } | 200 | } |
178 | 201 | ||
179 | public double getOsBusyPercent() throws Throwable { | 202 | public double getOsBusyPercent() throws Throwable { |
... | @@ -374,8 +397,12 @@ public class OraMon { | ... | @@ -374,8 +397,12 @@ public class OraMon { |
374 | if(colPdbCPU == null) colPdbCPU = new Collector(); | 397 | if(colPdbCPU == null) colPdbCPU = new Collector(); |
375 | rset = stmt.executeQuery("select systimestamp, c.NAME, s.value as NIWT, t.value as DBCPU from V$CON_SYSSTAT s, V$CON_SYS_TIME_MODEL t, V$CONTAINERS c where s.CON_ID=t.CON_ID and s.CON_ID=c.CON_ID and s.name='non-idle wait time' and t.STAT_NAME='DB CPU'"); | 398 | rset = stmt.executeQuery("select systimestamp, c.NAME, s.value as NIWT, t.value as DBCPU from V$CON_SYSSTAT s, V$CON_SYS_TIME_MODEL t, V$CONTAINERS c where s.CON_ID=t.CON_ID and s.CON_ID=c.CON_ID and s.name='non-idle wait time' and t.STAT_NAME='DB CPU'"); |
376 | while(rset.next()) { | 399 | while(rset.next()) { |
377 | colPdbCPU.updateValue(rset.getTimestamp(1), rset.getString(2) + strNiwTime, rset.getLong(3)); | 400 | Timestamp ts = rset.getTimestamp(1); |
378 | colPdbCPU.updateValue(rset.getTimestamp(1), rset.getString(2) + strCpuTime, rset.getLong(4)); | 401 | String name = rset.getString(2); |
402 | colPdbCPU.updateValue(ts, name + strNiwTime, rset.getLong(3)); | ||
403 | colPdbCPU.updateValue(ts, name + strCpuTime, rset.getLong(4)); | ||
404 | if(pdbSet == null) pdbSet = new HashSet<String>(); | ||
405 | pdbSet.add(name); | ||
379 | } | 406 | } |
380 | rset.close(); | 407 | rset.close(); |
381 | 408 | ... | ... |
-
Please register or sign in to post a comment