Mitenkähän kun sivuni ilmoittaa 'too many connections'. En usko että siellä oikeasti on kovinkaan montaa kirjaunutta käyttäjää, ehkä joitain kymmeniä. Otin webbihotellin serverimaailmasta joten en tiedä heidän asetuksistaan, mutta onko jokin komento jolla voi lisätä maksimikäyttäjiä connectiin tai jolla voisi tarkistaa paljonko käyttäjiä on kiinni kannassa?
Toinen mikä tuli mieleeni on että onkohan mulla oikea connect-rutiinikaan. Pitäisiköhän siihen laittaa mukaan jokin multi-session parametri tms.?
Tämmöisellä otan kiinni tietokannat:
$testi = mysql_connect('$iposoite',$srvusername,$srvpassword) or die ('Tietokantayhteys ei onnistunut');
mysql_select_db($database) or die( "Tietokantaa ei saatu valituksi");
Toinen mikä tuli mieleeni on että onkohan mulla oikea connect-rutiinikaan. Pitäisiköhän siihen laittaa mukaan jokin multi-session parametri tms.?
Tämmöisellä otan kiinni tietokannat:
$testi = mysql_connect('$iposoite',$srvusername,$srvpassword) or die ('Tietokantayhteys ei onnistunut');
mysql_select_db($database) or die( "Tietokantaa ei saatu valituksi");
Vastaukset 3
Vanhimmat
Niin tuo ilmoitus ei varsinaisesti liity yksistään sivuihisi, vaan MySQL palvelimen (jota muutkin käyttävät) asetettu max käyttäjämäärä ylittyy hetkellisesti jolloin saat tuon ilmoituksen. Et voi itse muuttaa tuota asetusta joten otahan yhteyttä palvelimen ylläpitoon. Ellei asia korjaannu niin vaihda webhotellia.
Toki voit tehdä itsekkin jotain, kuten katkasta MySQL yhteys heti kun sitä et tarvi, etkä vasta normaalisti scriptin suorituksen jälkeen. http://fi2.php.net/manual/fi/function.mysql-close.php ja ehkä vilkasta myös http://fi2.php.net/manual/fi/function.mysql-free-result.php
Joissain tapauksissa http://fi2.php.net/manual/fi/function.mysql-pconnect.php on parempa kuin tuo käyttämäsi yhdistämisjuttu.
Sekä voit optimoida kyselyitä paremmaksi(nopeammaksi) mikäli näin et ole jo tehnyt. Sekä älä käytä SELECT * FROM taulusi vaan luettele ne sarakkeet joista tietoa tarvitset SELECT etunimi, sukunimi FROM taulusi
Sekä jos haluat satunnaisen nimen niin älä tee näin SELECT nimi FROM taulusi ORDER BY RAND() LIMIT 1 koska tuossa järjestetään koko taulusi ja sitten otetaan vain yksi tai niin monta kuin tarttet, tietojen järjestäminen on aina hidasta joten sitä ei tule käyttää turhaan. Vaan vaikkapa SELECT nimi FROM taulusi WHERE id = ()
Tuolleen saat vähennettyä tietokannan kuormaa/yhteyksiä omalta osaltasi. Suurin syy tietokantapalvelimien hitauteen/kuormitukseen on nimenomaan huonot kyselyt, huonot taulurakenteet ja indeksien puuttuminen.
Käyttäjän määrän ainakin http://dev.mysql.com/doc/refman/5.0/en/show-processlist.html joskin välttämättä oikeutesi ei riitä tuohon kyselyyn, mut kokeilla voit.
itsellä on siellä sivut ja parhaimmillaan sivustolla on ollut aika massiivista liikennettä.
Ikinä ei ole tullut vastaan tuota rajoitusta vielä.
Suljetko varmasti ne kantayhteydet aina, kun kantaan ei tarvita enää yhteyttä? Meinaan jos skriptisi vain avaa kantayhteyden eikä sulje sitä, niin sitten voisi käydäkin noin
Joo, kiitoksia. Itse asiassa en sulje kantayhteyksiä ollenkaan. Nehän sulkeutuvat automaattisesti kun sivu vaihtuu, mutta se kyllä varmasti kuluttaa turhaan resursseja. Pitää tuo ainakin korjata kuntoon. Ja varmaan pitää kyselyihin tehdä niitä rajoitteita myös etten ota aina "SELECT * taulu" vaan vain tarvitsemani datan.
Noo, oppia oppia