![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 19.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witam, mam mały problem dot. wstawiania danych do bazy (1M wierszy), klient którego używam jest w wersji 3.23.39. Dane generuje lokalnie za pomoca skryptu php:
Lecz tutaj pojawia się problem. Skrypt wstawia maksymalnie 100 wierszy, po czym przestaje odpowiadać. Przypuszczam że problem lezy w delay_key_writes którego bufor zapycha się pod nawałem informacji ze skryptu php (10k wieszy generuje się w około 35 sekund). Jak mogę tą funkcję wyłączyć lub też jakie moga byc inne przyczyny takiego zachowania się bazy mysql ? Może mam coś nie tak ze skryptem ? Ten post edytował lunlog 21.04.2006, 08:37:45 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 19.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
Skrypt nie wywala sie z powodu timeout. Moge go uruchomic nawet na sekunde a i tak wstawi tylko 100 rekordow do bazy. Moge go rowniez uruchomic na godzine 3600 sekund a i tak wstawi tylko 100 rekordow. Wiec timeout odpada...
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
mysql_error" title="Zobacz w manualu php" target="_manual
Może mysql gdzies sie wysypuje? |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 19.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
Mozliwe, ale zeby za kazdym razem wstawial nie wiecej, nie mniej tylko 100 rekordow ? To bardziej podpada pod jakis blad w ustawieniach zmiennych servera mysql, a jedyna zmienna ustawiona w moim serverze na wartosc 100 to delay_key_write, czy tam jakas funkcja zalezna od niej...
Ma ktos pomysl jak wylaczyc ta funkcje ? w manualach wyczytalem ze mozna tego dokonac poleceniem SET ale nie zabardzo wiem jak... i gdzie, probowalem zdefiniowac zmienna w zakladce [mysqld] w pliczku my.ini aczkolwiek tylko polozylem server... wiec juz nie wiem kompletnie co mam z tym zrobic... Jak bede w domu to sprawdze czy mysql wysypuje jakies konkretne bledy po dodaniu tego 100-nego rekordu. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Przyjrzyj sie temu fragmentowi kodu - tak długo, aż nie znajdziesz 2 bŁędów (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Jak je poprawisz, skrypt powinien ruszyc - bo u mnie przed poprawą sie zapętlał. Natomiast ilość rekordów nie ma specjalnego znaczenia - ja u siebie dodaje 10 000 rekordów w czasie 4 sekund poprzez niezależne INSERTy (10 000 zapytan). Ten post edytował spenalzo 19.04.2006, 17:00:31 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 19.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
Sprawdze sobie w domqu... po 23 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) teraz work work work (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
//edit 2 bledy ?, ja tutaj tylko bym wstawil wartosci liczbowe i wywalil zmienna $limit, bo wczesniej tak dzialalo dobrze... a 2 blad ? nie mam pojecia... w tym kawalku ktory zaznaczyles nie ma } ale to pewnie przypadek.... Ten post edytował lunlog 19.04.2006, 18:09:55 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
"Znajdź dwa szczegóły różniące poniższe obrazki"
(IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 19.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
Diabel tkwi w szczegolach... podobno (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) dzieki za pomoc, sprawdze sobie jak to dziala i czy dalej bedzie wstawialo tylko 100 pierwszych (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Nie spodziewalbym sie ze tutaj bede mial blad... //edit Tak czy siak, skrypt nie wywala się po 100 wpisanych rekordach tak jak wcześniej... teraz wywala się po 3700 wstawionych rekordach (ironia), jest lepiej ale to jeszcze nie jest to... docelowo skrypt powinien wstawić 1M danych. Ma ktoś jakiś pomysł co wywala mi skrypt tym razem ? zmieniłem set-variable=key_buffer=16M na set-variable=key_buffer=256M ale to nie pomogło... może mój problem wynika ze sposobu w jaki lacze sie z baza danych ? po tych 3700 rekordach mysql wywala mi bledy ze nie moze sie polaczyc z baza danych...
A teraz pytanie z innej beczki, może tem problem który mam w tej chwili, wlewanie maksymalnie 3700 rekordow do bazy danych wiąże się z jakimis ustawieniami mojego serwera ? Na wypadek jak ktoś byłby tak wielkoduszny i chciał stworzyć mi pliczek importu dla tego skryptu to podaje kod tabeli do której wlewane sa dane (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Jakby cos to prosze o informacje na PW (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) lub w tym temacie. Ten post edytował lunlog 20.04.2006, 00:34:51 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Nadal nie napisałeś, czy mysql rzuca jakieś błędy po uzyciu mysql_error. (
Natomiast ta zmienna nie sądze zeby miała wpływ, gdyż służy ona do czegoś innego. Jak to nie pomoże, to zobacz czy w odpowiednim miejscu masz ustawiony insert. A jak to nie pomoze to zmien mysql-a na jakas wersje 4.x.x |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 19.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
Po jakimś czasie wywala to.. po kilku sekundach.
Kod Warning: Can't connect to MySQL server on 'localhost' (10048) in C:\FoxServ\www\1.php on line 11 Warning: MySQL Connection Failed: Can't connect to MySQL server on 'localhost' (10048) in C:\FoxServ\www\1.php on line 11 Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in C:\FoxServ\www\1.php on line 12 Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in C:\FoxServ\www\1.php on line 13 Błšd mysql: Can't connect to MySQL server on 'localhost' (10048 i nic pozatym... moj obecny plik 1.php
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 85 Pomógł: 0 Dołączył: 15.07.2005 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Warning: MySQL Connection Failed: Can't connect to MySQL server on 'localhost' (10048) oznacza ze nie mozna nawiazac polaczenia z serwerem mysql na localhoscie radze sprawdzic czy aby napewno mysql dziala (czy demon jest odpalony i nasluchuje polaczen) |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 19.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
Tyle to ja wiem, hehe. Usluga podczas odpalania skryptu dziala na pewno...
|
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Wiesz.... jak wywolujesz w pętli połączenie do MySQL to cóż... chcesz otworzyć milion połączen?
Teraz widzisz dlaczego trzeba podawać błędy jakie generuje skrypt - jakbys pokazal od rauz, to temat byłby rozwiazany 2dni temu (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Ten post edytował spenalzo 20.04.2006, 16:37:33 |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 19.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
O.o ze co ? zapytanie wywoluje w petli przed wyslaniem danych do bazy... nie rozumiem... jak w pentli ? to to sie robi inaczej ? nie kumam cza-czy...
Macie jakies propozycja naprawy tego ? Gdzie mam blad w skrypcie generujacym dane czy w pliku z ktorego korzysta ten plik generujacy ? Query przeciez sie zamyka po skonczeniu wysylania danych do bazy. (chyba) //edit if (!query($link); { query($link); } else { } cos takiego ? styknie ? (pisze na szybko w pracy (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) ) Ten post edytował lunlog 20.04.2006, 20:22:49 |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Nie, nie coś takiego.
Przeanalizuj sobie swoją funkcje QUERY, a potem zobacz gdzie ją używasz. Nie szkodzi, że sei zamyka polaczenie - jak dla mnie sam fakt wywołania miliona polaczń jest bez sensu... Polaczenie nawiazuje sie na poczatku skrypyu, a nie przy kazdym wywolaniu zapytania. Ten post edytował spenalzo 20.04.2006, 20:27:37 |
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 19.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
Dobra pokombinuje i powiem jak mi poszło..... chociaz nie wiem dokładnie jak to mam zrobić... ale dzięki za namiary gdzie leży problem.
//edit Działa wkońcu ! ha, zmieniłem układ skryptu ładowania w ten sposób że łączy się z serverem tylko raz... i query wykonuje w momencie kiedy musi... znaczy sie połączy się z baza danych i rozłączy dopiero po zakończeniu funkcji query (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) Na początku skrypt wstawił mi o 72k wierszy za duzo... ale to chyba moja wina bo zostawiłem jakies smieci w bazie danych... ale za 2 razem wstawił równo 1M (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) i to w czesie dużo krutszym niż sie spodziewałem... wywaliłem cały output ze skrypu, odpaliłem skrypt i wyłączyłem przegladarkę (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) Dziękuje bardzo za pomoc (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) sam pewnie bym sobie nie poradził. Niech szybkie łącza oraz dobrze napisane skrypty będa z Wami (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) Ten post edytował lunlog 20.04.2006, 22:53:28 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 15:34 |