2014-07-10 21 views
6

içinde ben bunların hepsi saatte çalıştırılıyor neden emin değilim ben arka SET extra_float_digits = 3SET extra_float_digits = 3 postgresql

çalışan neredeyse 7-8 sorunuz, PostgreSQL DB motoru çalıştırmayı zaman. Extra_float_digits değişkeninin, Postgresql'de kayan nokta değerleri için görüntülenen basamak sayısını ayarladığını biliyorum, ancak DB motorunu başlattığımda bu sorguların neden arka planda çalıştığından emin değilim.

Artık yapılandırma dosyasında extra_float_digits = 3 var. Ben bunu açıklama bile, bu sorgular hala

help..Thanks

sorgular gerçekten yayınlanmıyor
+2

Bağlantı boşsa, Postgres'in oturum istatistikleri yine de son çalıştırılan bildirimi rapor edecektir. Bu sorguların gerçekten çalıştığından emin misiniz? –

+0

Tekrar kontrol ettik ve bunları ve diğer sorguları boşta görüyorum .. bu sorgunun amacı nedir? ve bunlar zaman aşımına uğrayan bir query_timeout var mı? – WinSupp

+2

Bu sorgu Postgres tarafından verilmiyor, bu ifadeleri çalıştıran Postgres'e bağlanan uygulama. –

cevap

8

gerek .. Arka planda çalıştırın. Nick yorumlarda söylediği gibi, bağlantılar boşta durumda olacak. pg_stat_activity, bir sorgu boşta olduğunda çalışmayı bitiren son ifadeyi gösterir.

Diğer bölüm için: PgJDBC'yi kullandığınızı söyleyebilirim. SET extra_float_digits, PgJDBC'nin veri tabanından kayan nokta değerleri aldığında hassasiyeti kaybetmemesini sağlar. İlk bağlantı konuşmasının bir parçası. Bu normal ve bunu görmezden gelebilirsiniz. If you're on a recent PgJDBC, send the additional connection parameter assumeMinServerVersion=9.0 and it'll go away.

Orada neler var, bir sürü yeni boşta bağlantı var.

Uygulama/uygulama sunucunuzun yapılandırmasına bakın. Bağlantı havuzunuz muhtemelen makul sınırlara sahip değil.

+0

@WinSupp Burada söylenecek bir şey var mı? Sessiz oldun. Cevabım yardımcı oldu mu? –

+0

Bu özellik belgelendirilmiş gibi görünmüyor (http://jdbc.postgresql.org/documentation/head/index.html) ve bunu 9.3 sürücüsünün kaynağında bulamadım. "Son PgJDBC" demek, bu sadece yaklaşan 9.4 sürücüsünde kullanılabilir mi? –

0

Yeni bir bağlantı kurulduğunda, postgres bu extra_float_digits ayarını tetikler. Sorun veritabanı sağlık kontrol modülüyle yapıldı.

1

Bu sorunu Java ve Postgresql ile yaşadım. Bu sorunu PGPoolingDataSource ve Close bağlantısını kullanarak çözdüm.

// Sınıf Fabrikası Bağlantı: Ben sınıfları inşa ettik nasıl İşte

public class FacConn { 

    public static PGPoolingDataSource getConnection2() { 
    PGPoolingDataSource source = new PGPoolingDataSource(); 
    source.setServerName("local"); 
    source.setPortNumber(5432); 
    source.setDatabaseName("mydbname"); 
    source.setUser("LoginUser"); 
    source.setPassword("password"); 
    source.setAssumeMinServerVersion("9.0"); 
    source.setConnectTimeout(50000);   

    return source;  
    } 
} 

// Sınıf userDAO - benim seçeneğinde veritabanı

public class UsuarioDAO { 

    private PGPoolingDataSource poolDS = FabConexao.getConnection2(); 
    private Connection con = null; 

    public User searchById(Integer id){ 
     try{con = poolDS.getConnection();} 
     catch (SQLException e){throw new RuntimeException(e);} 

     String sql = "Select * from people where id_people=?"; 
     ResultSet rs = null; 

     try (PreparedStatement smtm = con.prepareStatement(sql)){ 
      smtm.setInt(1, id); 
      rs = smtm.executeQuery(); 
      People people = new People(); 
      if(rs.next()){ 
       people.setId_People(rs.getInt("id_people")); 
       people.setFirtname(rs.getString("firstname")); 
       people.setLastname(rs.getString("lastname")); 
       people.setAge(rs.getInt("age")); 
       people.setActiv(rs.getBoolean("activ")); 
      } 
      smtm.close(); 
      return people; 
     } catch (SQLException e){ 
      e.printStackTrace(); 
      System.err.println(e.getClass().getName()+": "+ e.getMessage());   
     } finally { 
      if (rs != null) { 
       try {rs.close();} catch (SQLException e) { /* ignored */} 
      } 
      poolDS.close(); 
     } 
     return null; 
} 
0

ile etkileşim sınıfı Bu bağlantıları bir pg-komutuyla sonlandırabilirsiniz. Örneğin:

SEC pg_terminate_backend DAN (t.pid) (pg_stat_activity PID Where durumu() = 'boş' ve sorgu '% flot%' gibi ve hemen < (STATE_CHANGE - aralığı '1 saat')) AS;