Пример #1
0
    def get(self, database, query):
        bs = block_size.c.block_size
        stmt = powa_getstatdata_detailed_db()
        stmt = stmt.where(
            (column("datname") == bindparam("database")) &
            (column("queryid") == bindparam("query")))
        stmt = stmt.alias()
        from_clause = outerjoin(powa_statements, stmt,
                           and_(powa_statements.c.queryid == stmt.c.queryid, powa_statements.c.dbid == stmt.c.dbid))
        c = stmt.c
        rblk = mulblock(sum(c.shared_blks_read).label("shared_blks_read"))
        wblk = mulblock(sum(c.shared_blks_hit).label("shared_blks_hit"))
        stmt = (select([
            column("query"),
            sum(c.calls).label("calls"),
            sum(c.runtime).label("runtime"),
            rblk,
            wblk,
            (rblk + wblk).label("total_blks")])
            .select_from(from_clause)
            .where(powa_statements.c.queryid == bindparam("query"))
            .group_by(column("query"), bs))

        value = self.execute(stmt, params={
            "query": query,
            "database": database,
            "from": self.get_argument("from"),
            "to": self.get_argument("to")
        })
        if value.rowcount < 1:
            self.render("xhr.html", content="No data")
            return
        self.render("database/query/detail.html", stats=value.first())
Пример #2
0
 def query(self):
     # Working from the statdata detailed_db base query
     inner_query = powa_getstatdata_detailed_db(bindparam("server"))
     inner_query = inner_query.alias()
     c = inner_query.c
     ps = powa_statements
     # Multiply each measure by the size of one block.
     columns = [
         c.srvid, c.queryid, ps.c.query,
         sum(c.calls).label("calls"),
         sum(c.runtime).label("runtime"),
         sum(mulblock(c.shared_blks_read)).label("shared_blks_read"),
         sum(mulblock(c.shared_blks_hit)).label("shared_blks_hit"),
         sum(mulblock(c.shared_blks_dirtied)).label("shared_blks_dirtied"),
         sum(mulblock(c.shared_blks_written)).label("shared_blks_written"),
         sum(mulblock(c.temp_blks_read)).label("temp_blks_read"),
         sum(mulblock(c.temp_blks_written)).label("temp_blks_written"),
         (sum(c.runtime) / greatest(sum(c.calls), 1)).label("avg_runtime"),
         sum(c.blk_read_time).label("blks_read_time"),
         sum(c.blk_write_time).label("blks_write_time")
     ]
     from_clause = inner_query.join(ps, (ps.c.queryid == c.queryid) &
                                    (ps.c.userid == c.userid) &
                                    (ps.c.dbid == c.dbid))
     return (select(columns).select_from(from_clause).where(
         c.datname == bindparam("database")).group_by(
             c.srvid, c.queryid,
             ps.c.query).order_by(sum(c.runtime).desc()))
Пример #3
0
 def query(self):
     # Working from the statdata detailed_db base query
     inner_query = powa_getstatdata_detailed_db()
     inner_query = inner_query.alias()
     c = inner_query.c
     ps = powa_statements
     # Multiply each measure by the size of one block.
     columns = [c.queryid,
                ps.c.query,
                sum(c.calls).label("calls"),
                sum(c.runtime).label("runtime"),
                sum(mulblock(c.shared_blks_read)).label("shared_blks_read"),
                sum(mulblock(c.shared_blks_hit)).label("shared_blks_hit"),
                sum(mulblock(c.shared_blks_dirtied)).label("shared_blks_dirtied"),
                sum(mulblock(c.shared_blks_written)).label("shared_blks_written"),
                sum(mulblock(c.temp_blks_read)).label("temp_blks_read"),
                sum(mulblock(c.temp_blks_written)).label("temp_blks_written"),
                (sum(c.runtime) / greatest(sum(c.calls), 1)).label("avg_runtime"),
                sum(c.blk_read_time).label("blks_read_time"),
                sum(c.blk_write_time).label("blks_write_time")]
     from_clause = inner_query.join(ps,
                                    (ps.c.queryid == c.queryid) &
                                    (ps.c.userid == c.userid) &
                                    (ps.c.dbid == c.dbid))
     return (select(columns)
             .select_from(from_clause)
             .where(c.datname == bindparam("database"))
             .group_by(c.queryid, ps.c.query)
             .order_by(sum(c.runtime).desc()))