public String printResults(boolean all) {
		StringBuffer sb = new StringBuffer(100);
		double singleMultiRatio = 0.0;

		sb.append("Scale factor:           " + parameterPool.getScalefactor()
				+ "\n");
		sb.append("Number of warmup runs:  " + warmups + "\n");
		if (multithreading)
			sb.append("Number of clients:      " + nrThreads + "\n");
		sb.append("Seed:                   " + seed + "\n");
		sb.append("Number of query mix runs (without warmups): "
				+ queryMix.getQueryMixRuns() + " times\n");
		sb.append("min/max Querymix runtime: "
				+ String.format(Locale.US, "%.4fs", queryMix
						.getMinQueryMixRuntime())
				+ " / "
				+ String.format(Locale.US, "%.4fs", queryMix
						.getMaxQueryMixRuntime()) + "\n");
		if (multithreading) {
			sb.append("Total runtime (sum):    "
					+ String.format(Locale.US, "%.3f", queryMix
							.getTotalRuntime()) + " seconds\n");
			sb.append("Total actual runtime:   "
					+ String.format(Locale.US, "%.3f", queryMix
							.getMultiThreadRuntime()) + " seconds\n");
			singleMultiRatio = queryMix.getTotalRuntime()
					/ queryMix.getMultiThreadRuntime();
		} else
			sb.append("Total runtime:          "
					+ String.format(Locale.US, "%.3f", queryMix
							.getTotalRuntime()) + " seconds\n");
		if (multithreading)
			sb.append("QMpH:                   "
					+ String.format(Locale.US, "%.2f", queryMix
							.getMultiThreadQmpH()) + " query mixes per hour\n");
		else
			sb.append("QMpH:                   "
					+ String.format(Locale.US, "%.2f", queryMix.getQmph())
					+ " query mixes per hour\n");
		sb.append("CQET:                   "
				+ String.format(Locale.US, "%.5f", queryMix.getCQET())
				+ " seconds average runtime of query mix\n");
		sb.append("CQET (geom.):           "
				+ String.format(Locale.US, "%.5f", queryMix
						.getQueryMixGeometricMean())
				+ " seconds geometric mean runtime of query mix\n");

		if (all) {
			sb.append("\n");
			// Print per query statistics
			Query[] queries = queryMix.getQueries();
			double[] qmin = queryMix.getQmin();
			double[] qmax = queryMix.getQmax();
			double[] qavga = queryMix.getAqet();// Arithmetic mean
			double[] avgResults = queryMix.getAvgResults();
			double[] qavgg = queryMix.getGeoMean();
			int[] qTimeout = queryMix.getTimeoutsPerQuery();
			int[] minResults = queryMix.getMinResults();
			int[] maxResults = queryMix.getMaxResults();
			int[] nrq = queryMix.getRunsPerQuery();
			for (int i = 0; i < qmin.length; i++) {
				if (queries[i] != null) {
					sb.append("Metrics for Query:      " + (i + 1) + "\n");
					sb.append("Count:                  " + nrq[i]
							+ " times executed in whole run\n");
					sb.append("AQET:                   "
							+ String.format(Locale.US, "%.6f", qavga[i])
							+ " seconds (arithmetic mean)\n");
					sb.append("AQET(geom.):            "
							+ String.format(Locale.US, "%.6f", qavgg[i])
							+ " seconds (geometric mean)\n");
					if (multithreading)
						sb.append("QPS:                    "
								+ String.format(Locale.US, "%.2f",
										singleMultiRatio / qavga[i])
								+ " Queries per second\n");
					else
						sb
								.append("QPS:                    "
										+ String.format(Locale.US, "%.2f",
												1 / qavga[i])
										+ " Queries per second\n");
					sb
							.append("minQET/maxQET:          "
									+ String
											.format(Locale.US, "%.8fs", qmin[i])
									+ " / "
									+ String
											.format(Locale.US, "%.8fs", qmax[i])
									+ "\n");
					if (queries[i].getQueryType() == Query.SELECT_TYPE) {
						sb.append("Average result count:   "
								+ String.format(Locale.US, "%.2f",
										avgResults[i]) + "\n");
						sb.append("min/max result count:   " + minResults[i]
								+ " / " + maxResults[i] + "\n");
					} else {
						sb.append("Average result (Bytes): "
								+ String.format(Locale.US, "%.2f",
										avgResults[i]) + "\n");
						sb.append("min/max result (Bytes): " + minResults[i]
								+ " / " + maxResults[i] + "\n");
					}
					sb
							.append("Number of timeouts:     " + qTimeout[i]
									+ "\n\n");
				}
			}
		}

		return sb.toString();
	}