В моем разделе / tmp не хватает места для выполнения очень большого SQL-запроса. Как я могу увеличить раздел / tmp?
Спасибо Том
РЕДАКТИРОВАТЬ:
Вот результаты запрошенных команд
blkid
/dev/sda1: UUID="e8604436-53ea-4a05-9459-6c498cf19a1a" SEC_TYPE="ext2" TYPE="ext3"
/dev/sda5: UUID="21bd6739-89c8-4196-986d-bec9474a4b1a" SEC_TYPE="ext2" TYPE="ext3"
/dev/sda6: UUID="1a80f7c6-d524-4974-82ee-c5bd734802b9" SEC_TYPE="ext2" TYPE="ext3"
/dev/sda7: TYPE="swap"
/dev/sda8: UUID="edee40d5-9337-4705-b152-7bc2b9b35336" SEC_TYPE="ext2" TYPE="ext3"
/dev/sda9: UUID="5c586547-8d78-4dd1-86c9-92f83b4d8fb5" SEC_TYPE="ext2" TYPE="ext3"
fdisk -l
Disk /dev/sda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000504d7
Device Boot Start End Blocks Id System
/dev/sda1 18663 19201 4329517+ 83 Linux
/dev/sda2 35 18662 149629410 5 Extended
/dev/sda5 35 642 4883728+ 83 Linux
/dev/sda6 643 1007 2931831 83 Linux
/dev/sda7 1008 1337 2650693+ 82 Linux swap / Solaris
/dev/sda8 1338 1386 393561 83 Linux
/dev/sda9 1387 18662 138769438+ 83 Linux
Partition table entries are not in disk order
cat /etc/mtab
/dev/sda1 / ext3 rw,errors=remount-ro 0 0
tmpfs /lib/init/rw tmpfs rw,nosuid,mode=0755 0 0
proc /proc proc rw,noexec,nosuid,nodev 0 0
sysfs /sys sysfs rw,noexec,nosuid,nodev 0 0
procbususb /proc/bus/usb usbfs rw 0 0
udev /dev tmpfs rw,mode=0755 0 0
tmpfs /dev/shm tmpfs rw,nosuid,nodev,size=1000m 0 0
devpts /dev/pts devpts rw,noexec,nosuid,gid=5,mode=620 0 0
/dev/sda9 /home ext3 rw 0 0
/dev/sda5 /usr ext3 rw 0 0
/dev/sda6 /var ext3 rw 0 0
rpc_pipefs /var/lib/nfs/rpc_pipefs rpc_pipefs rw 0 0
//192.168.254.12/SHARE1 /mnt/archive cifs rw,mand 0 0
/dev/sda8 /tmp ext3 rw 0 0
pvs
-su: pvs: command not found
pvs
-su: pvs: command not found
lvs
-su: lvs: command not found
Возможно, будет проще заменить / tmp простым файлом.
dd if=/dev/zero of=/var/mytmp bs=1024 count=<desired size in K>
mkfs -t ext3 /var/mytmp
umount /tmp
mount -o loop /var/mytmp /tmp
Затем создайте соответствующую строку монтирования в файле / etc / fstab.
Почему не просто скажите MySQL выполнять свою работу в другом месте? Либо установить TMPDIR
в среде MySQL или установите tmpdir = /some/non/tmp/path
в my.cnf.
Как именно это сделать, зависит от того, как в настоящее время устроены ваши диски. Если вы добавите в свой вопрос вывод следующих команд, это поможет:
fdisk -l
cat /etc/mtab
pvs
vgs
lvs
(последние три команды могут отсутствовать, если вы не используете LVM)
В качестве альтернативы вы можете попробовать переместить место, которое ваш SQL-сервер использует в качестве временного рабочего пространства. Вам нужно будет предоставить нам более подробную информацию о настройке базы данных (т.е. какой сервер базы данных вы используете? MySQL / Postgres / ...?), Чтобы получить помощь по этому поводу.
Если ваши базы данных находятся на том же диске, что и ваш раздел / tmp, вы можете обнаружить, что перенос рабочей области на другой диск значительно увеличит скорость таких сложных запросов.
Возможно, также стоит опубликовать SQL-запрос (и информацию о структурах, которые он запрашивает) в StackOverflow, чтобы увидеть, видит ли проходящий эксперт по SQL какие-либо очевидные части, которые требуют легкой оптимизации.
Поскольку вы вообще не используете LVM, и это изменение не повлияет на ваш /
или /boot
, если вы можете позволить себе некоторое время простоя во время выполнения операций, я бы предложил gparted
"живой компакт-диск". Загрузитесь с этим, скажите:
sda9
(ваш /home
) немного/sda8
(ваш /tmp
)sda8
чтобы заполнить новое место после негоЕсли вы можете позволить себе потерять немного места, тогда это будет быстрее (так как на /home
, просто операция изменения размера и любые необходимые для этого перемещения данных):
/home
на столько, сколько вы хотите нового /tmp
быть/home
/tmp
sda8
использует, так как вы можете установить его как что-то еще, но это может быть не так удобно в использовании.Еще один вариант - уменьшить пространство подкачки, которое живет впереди sda8
, и переместите, чем измените размер sda8
в дополнительное пространство. Насколько хороша эта идея, зависит от количества имеющейся у вас оперативной памяти и от того, что вы используете на компьютере. Этот вариант будет быстрее, так как вы не двигаетесь и не меняете размер /home
. На самом деле это будет безопаснее, так как вы не прикасаетесь /home
- gparted будет просто действовать на /tmp
и пространство подкачки, так что ничего важного, если операция изменения размера пойдет не так, и все в затронутых разделах окажется поврежденным.
Я несколько раз возился с такими разделами с gparted
и не имел абсолютно никаких проблем, но само собой разумеется, что перед его использованием вы должны сделать полную резервную копию всех ваших важных файлов и текущей таблицы разделов. Я слышал сообщения о проблемах, если вы позволите gparted
возиться с вашим разделом, содержащим /boot
но я всегда держал /boot
в собственном разделе в начале диска, так что мне никогда не приходилось рисковать.
В этом случае, вероятно, проще всего просто размонтировать / tmp, удалить / dev / sda8 с помощью fdisk, создать новый sda8 большего размера, mkfs на нем и снова смонтировать. Однако это может стоить вам времени простоя (приложения).
В следующий раз создайте свои файловые системы на LVM, что сделает это в миллионы раз проще.
В зависимости от того, какой у вас бокс, вы можете смонтировать / tmp в оперативной памяти, погуглить. Solaris делает это по умолчанию, и я делал это в Linux (и OS / 2, по сути), если у вас есть оперативная память, это действительно может ускорить процесс. Разумеется, вытолкнет на свопинг. Это, вероятно, исправит это для вас, поскольку ваш своп составляет 2,6 ГБ против 400 МБ для / tmp, верно?
Черт возьми, вот как установить его на лету поверх существующего / tmp! http://www.funtoo.org/en/articles/linux/ffg/3/
Это был быстрый гугл, раньше при загрузке могли быть проблемы (нужны вещи в вашем initrd, чтобы он работал).
Возможно, потребуется перезагрузка, чтобы затем размонтировать, так как у вас, вероятно, будут открытые файлы в / tmp на диске и в / tmp при свопинге (хотя вы можете использовать lsof, чтобы найти их и убить процессы, которые их открывают, чтобы вы могли его размонтировать ).
Просто используйте это для строки в вашем / etc / fstab
tmpfs / tmp tmpfs по умолчанию, noatime, mode = 1777 0 0
Я бы сказал, что вы можете удалить noatime или заменить его relatime