|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
package testsuite.perf; |
|
|
|
import testsuite.BaseTestCase; |
|
|
|
|
|
|
|
|
|
|
|
|
|
public class RetrievalPerfTest extends BaseTestCase { |
|
|
|
|
|
|
|
private static final int NUM_TESTS = 10000; |
|
|
|
private static final int NUM_ROWS = 80; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public RetrievalPerfTest(String name) { |
|
super(name); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static void main(String[] args) { |
|
new RetrievalPerfTest("testRetrievalMyIsam").run(); |
|
new RetrievalPerfTest("testRetrievalHeap").run(); |
|
new RetrievalPerfTest("testRetrievalCached").run(); |
|
} |
|
|
|
|
|
|
|
|
|
public void setUp() throws Exception { |
|
super.setUp(); |
|
createTable("retrievalPerfTestHeap", "(priKey INT NOT NULL PRIMARY KEY," |
|
+ "charField VARCHAR(80)) ", "HEAP"); |
|
createTable("retrievalPerfTestMyIsam", "(priKey INT NOT NULL PRIMARY KEY," |
|
+ "charField VARCHAR(80)) ", "MyISAM"); |
|
|
|
for (int i = 0; i < NUM_ROWS; i++) { |
|
this.stmt |
|
.executeUpdate("INSERT INTO retrievalPerfTestHeap (priKey, charField) VALUES (" |
|
+ i |
|
+ ",'abcdefghijklmnopqrstuvqxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')"); |
|
this.stmt |
|
.executeUpdate("INSERT INTO retrievalPerfTestMyIsam (priKey, charField) VALUES (" |
|
+ i |
|
+ ",'abcdefghijklmnopqrstuvqxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')"); |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void testRetrievalCached() throws Exception { |
|
this.stmt.executeUpdate("SET QUERY_CACHE_TYPE = DEMAND"); |
|
|
|
double fullBegin = System.currentTimeMillis(); |
|
double averageQueryTimeMs = 0; |
|
double averageTraversalTimeMs = 0; |
|
|
|
for (int i = 0; i < NUM_TESTS; i++) { |
|
long queryBegin = System.currentTimeMillis(); |
|
this.rs = this.stmt |
|
.executeQuery("SELECT SQL_CACHE * FROM retrievalPerfTestHeap"); |
|
|
|
long queryEnd = System.currentTimeMillis(); |
|
averageQueryTimeMs += ((double) (queryEnd - queryBegin) / NUM_TESTS); |
|
|
|
long traverseBegin = System.currentTimeMillis(); |
|
|
|
while (this.rs.next()) { |
|
this.rs.getInt(1); |
|
this.rs.getString(2); |
|
} |
|
|
|
long traverseEnd = System.currentTimeMillis(); |
|
averageTraversalTimeMs += ((double) (traverseEnd - traverseBegin) / NUM_TESTS); |
|
} |
|
|
|
double fullEnd = System.currentTimeMillis(); |
|
double fullTime = (fullEnd - fullBegin) / 1000; |
|
double queriesPerSec = NUM_TESTS / fullTime; |
|
double rowsPerSec = (NUM_ROWS * NUM_TESTS) / fullTime; |
|
System.out.println("\nQuery Cache From Heap Retrieval\n"); |
|
System.out.println("Full test took: " + fullTime + " seconds."); |
|
System.out.println("Queries/second: " + queriesPerSec); |
|
System.out.println("Rows/second: " + rowsPerSec); |
|
System.out.println("Avg. Query Exec Time: " + averageQueryTimeMs |
|
+ " ms"); |
|
System.out.println("Avg. Traversal Time: " + averageTraversalTimeMs |
|
+ " ms"); |
|
|
|
|
|
assertTrue(fullTime < 45); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void testRetrievalHeap() throws Exception { |
|
double fullBegin = System.currentTimeMillis(); |
|
double averageQueryTimeMs = 0; |
|
double averageTraversalTimeMs = 0; |
|
|
|
for (int i = 0; i < NUM_TESTS; i++) { |
|
long queryBegin = System.currentTimeMillis(); |
|
this.rs = this.stmt |
|
.executeQuery("SELECT * FROM retrievalPerfTestHeap"); |
|
|
|
long queryEnd = System.currentTimeMillis(); |
|
averageQueryTimeMs += ((double) (queryEnd - queryBegin) / NUM_TESTS); |
|
|
|
long traverseBegin = System.currentTimeMillis(); |
|
|
|
while (this.rs.next()) { |
|
this.rs.getInt(1); |
|
this.rs.getString(2); |
|
} |
|
|
|
long traverseEnd = System.currentTimeMillis(); |
|
averageTraversalTimeMs += ((double) (traverseEnd - traverseBegin) / NUM_TESTS); |
|
} |
|
|
|
double fullEnd = System.currentTimeMillis(); |
|
double fullTime = (fullEnd - fullBegin) / 1000; |
|
double queriesPerSec = NUM_TESTS / fullTime; |
|
double rowsPerSec = (NUM_ROWS * NUM_TESTS) / fullTime; |
|
System.out.println("\nHEAP Table Retrieval\n"); |
|
System.out.println("Full test took: " + fullTime + " seconds."); |
|
System.out.println("Queries/second: " + queriesPerSec); |
|
System.out.println("Rows/second: " + rowsPerSec); |
|
System.out.println("Avg. Query Exec Time: " + averageQueryTimeMs |
|
+ " ms"); |
|
System.out.println("Avg. Traversal Time: " + averageTraversalTimeMs |
|
+ " ms"); |
|
|
|
|
|
assertTrue(fullTime < 45); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void testRetrievalMyIsam() throws Exception { |
|
double fullBegin = System.currentTimeMillis(); |
|
double averageQueryTimeMs = 0; |
|
double averageTraversalTimeMs = 0; |
|
|
|
for (int i = 0; i < NUM_TESTS; i++) { |
|
long queryBegin = System.currentTimeMillis(); |
|
this.rs = this.stmt |
|
.executeQuery("SELECT * FROM retrievalPerfTestMyIsam"); |
|
|
|
long queryEnd = System.currentTimeMillis(); |
|
averageQueryTimeMs += ((double) (queryEnd - queryBegin) / NUM_TESTS); |
|
|
|
long traverseBegin = System.currentTimeMillis(); |
|
|
|
while (this.rs.next()) { |
|
this.rs.getInt(1); |
|
this.rs.getString(2); |
|
} |
|
|
|
long traverseEnd = System.currentTimeMillis(); |
|
averageTraversalTimeMs += ((double) (traverseEnd - traverseBegin) / NUM_TESTS); |
|
} |
|
|
|
double fullEnd = System.currentTimeMillis(); |
|
double fullTime = (fullEnd - fullBegin) / 1000; |
|
double queriesPerSec = NUM_TESTS / fullTime; |
|
double rowsPerSec = (NUM_ROWS * NUM_TESTS) / fullTime; |
|
System.out.println("\nMyIsam Retrieval\n"); |
|
System.out.println("Full test took: " + fullTime + " seconds."); |
|
System.out.println("Queries/second: " + queriesPerSec); |
|
System.out.println("Rows/second: " + rowsPerSec); |
|
System.out.println("Avg. Query Exec Time: " + averageQueryTimeMs |
|
+ " ms"); |
|
System.out.println("Avg. Traversal Time: " + averageTraversalTimeMs |
|
+ " ms"); |
|
|
|
|
|
assertTrue(fullTime < 45); |
|
} |
|
} |
|
|